使用条件语句替换 pandas DataFrame 中的条目
Posted
技术标签:
【中文标题】使用条件语句替换 pandas DataFrame 中的条目【英文标题】:Replace an entry in a pandas DataFrame using a conditional statement 【发布时间】:2015-05-12 14:26:14 【问题描述】:我想在给定条件的情况下更改 Dataframe 中条目的值。例如:
d = pandas.read_csv('output.az.txt', names = varname)
d['uld'] = (d.trade - d.plg25)*(d.final - d.price25)
if d['uld'] > 0:
d['uld'] = 1
else:
d['uld'] = 0
我不明白为什么上述方法不起作用。 感谢您的帮助。
【问题讨论】:
【参考方案1】:使用np.where
根据简单的布尔标准设置您的数据:
In [3]:
df = pd.DataFrame('uld':np.random.randn(10))
df
Out[3]:
uld
0 0.939662
1 -0.009132
2 -0.209096
3 -0.502926
4 0.587249
5 0.375806
6 -0.140995
7 0.002854
8 -0.875326
9 0.148876
In [4]:
df['uld'] = np.where(df['uld'] > 0, 1, 0)
df
Out[4]:
uld
0 1
1 0
2 0
3 0
4 1
5 1
6 0
7 1
8 0
9 1
至于你做的失败的原因:
In [7]:
if df['uld'] > 0:
df['uld'] = 1
else:
df['uld'] = 0
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-7-ec7d7aaa1c28> in <module>()
----> 1 if df['uld'] > 0:
2 df['uld'] = 1
3 else:
4 df['uld'] = 0
C:\WinPython-64bit-3.4.3.1\python-3.4.3.amd64\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
696 raise ValueError("The truth value of a 0 is ambiguous. "
697 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 698 .format(self.__class__.__name__))
699
700 __bool__ = __nonzero__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
所以错误是您正在尝试使用 True
或 False
评估数组,这会变得模棱两可,因为有多个值要比较,因此会出现错误。在这种情况下,您不能真正使用推荐的any
、all
等,因为您想屏蔽 df 并仅设置满足条件的值,pandas 网站上有关于此的解释: http://pandas.pydata.org/pandas-docs/dev/gotchas.html 和此处的相关问题:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
np.where
将布尔条件作为第一个参数,如果为真则返回第二个参数,否则返回第三个参数。
更新
再次查看此内容后,您可以通过使用astype
进行转换将布尔系列转换为int
:
In [23]:
df['uld'] = (df['uld'] > 0).astype(int)
df
Out[23]:
uld
0 1
1 0
2 0
3 0
4 1
5 1
6 0
7 1
8 0
9 1
【讨论】:
非常感谢。我真的很惊讶我能提出一个问题并得到如此详细的答案。多么棒的体验。再次感谢!以上是关于使用条件语句替换 pandas DataFrame 中的条目的主要内容,如果未能解决你的问题,请参考以下文章
如何通过析取语句(逻辑“或”)对 pandas DataFrame 进行切片? [复制]
在不使用索引的情况下替换 pandas DataFrame 中选定单元格的值
pandas使用replace函数替换dataframe中的值:replace函数使用正则表达式对dataframe中的值进行替换
pandas使用replace函数替换dataframe中的值:replace函数对dataframe中指定数据列的值进行替换替换具体数据列的相关值