【发布时间】:2017-02-03 12:25:03
【问题描述】:
我知道这样的问题已经被问了无数种,但到目前为止我还没有找到这个问题的答案。
我已将两个 .csv 文件与 Pandas 一起加入,现在我想在新加入的 .csv 文件中添加更多列,并根据现有数据计算值。
但是,我不断收到此错误:
"The truth value of a is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()."
现在这显然是我列的数据类型(全是整数)的问题,但我还没有找到一种(有效的)方法来将该列设置为整数。
这是我的代码:
import pandas
def nscap(ns):
if ns <= 13:
x = ns
elif ns > 13:
x = 13
return x
df_1 = pandas.read_csv("a.csv", sep=';', names=["DWD_ID", "NS"], header=0)
df_2 = pandas.read_csv("b.csv", sep=';', names=["VEG", "DWD_ID"], header=0)
df_joined = pandas.merge(df_1, df_2, on="DWD_ID")
df_joined["NS_Cap"] = nscap(df_joined["NS"])
如果我设置
df_joined["NS_Cap"] = nscap(20)
代码运行良好
我尝试过 .astype(int) 或 .to_numeric() 之类的函数,但除非我的语法错误,否则它对我不起作用。
提前致谢!
【问题讨论】:
-
嗨,欢迎来到 Stack Overflow。 IIUYC,你想对
NS列应用nscap以获得NS_Cap,对吗? -
你在
df_joined['NS_Cap'] = df_joined['NS'].clip_upper(13)之后看到:pandas.pydata.org/pandas-docs/stable/generated/…这里的错误是你正在尝试使用理解标量值的运算符比较数组,如果你做了df_joined['NS'].apply(nscap)那么它应该工作 -
这就像一个魅力!太感谢了!到目前为止从未遇到过这种语法!
-
嗨,一个新问题需要一个新帖子。如果任何答案满足您的原始问题,请投票/接受。只需在此处留下指向您的新帖子/问题的链接。谢谢!
标签: python python-2.7 csv pandas