wre*_*rez 7 python python-2.7 pandas
据我所知,pandas数据帧类型具有测试其值的逻辑的能力.
这是代码:
import pandas as pd
data = pd.DataFrame(columns=['a', 'b', 'c'])
data = data.append({'a': 'I have data', 'b': 'no more complexe', 'c': 024204}, ignore_index=True)
data = data.append({'a': 'audoausd', 'b': '2048rafaf', 'c': 29313}, ignore_index=True)
data = data.append({'a': 'koplak ente gan', 'b': 'ente g bisa koplak', 'c': 29313}, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
现在我们有以下数据帧:
a b c
0 I have data no more complexe 10372
1 audoausd 2048rafaf 29313
2 koplak ente gan ente g bisa koplak 29313
Run Code Online (Sandbox Code Playgroud)
测试列c的逻辑值并将其保存到变量中
c = data.c > 20000
Run Code Online (Sandbox Code Playgroud)
将c设置为以下值
0 False
1 True
2 True
Name: c, dtype: bool
Run Code Online (Sandbox Code Playgroud)
测试列b的逻辑值并将其保存到变量中
b = data.b.str.contains('koplak')
Run Code Online (Sandbox Code Playgroud)
b值
0 False
1 False
2 True
Name: b, dtype: bool
Run Code Online (Sandbox Code Playgroud)
还有列a
a = data.a.str.contains('koplak')
Run Code Online (Sandbox Code Playgroud)
一个值
0 False
1 False
2 True
Name: b, dtype: bool
Run Code Online (Sandbox Code Playgroud)
当我通过做一个&b&c比较所有这些值将返回:
0 False
1 False
2 True
dtype: bool
Run Code Online (Sandbox Code Playgroud)
如果有很多列涉及到硬编码,它不是很好,所以我尝试制作一个包含所有列逻辑的列表
logic = [a, b, c]
Run Code Online (Sandbox Code Playgroud)
如何自动比较所有项目以获得&b&c结果?
unu*_*tbu 10
a & b & c 相当于
import functools
print(functools.reduce(lambda x,y: x & y, [a, b, c]))
Run Code Online (Sandbox Code Playgroud)
产量
0 False
1 False
2 True
dtype: bool
Run Code Online (Sandbox Code Playgroud)
与我下面的原始答案(建议np.logical_and.reduce)不同,我有信心functools.reduce(lambda x,y: x & y, [a, b, c])将忠实地返回同一系列a & b & c.
(在Python2.7中,reduce是一个内置函数.functools.reduce与函数相同reduce.在Python3中,reduce已从内置函数中删除并且仅functools.reduce保留.因此,为了将来验证您的代码,请使用functools.reduce.)
编辑:使用np.logical_and.reduce([logic])可能无法在所有情况下使用.这是一个反例:
import pandas as pd
import numpy as np
x = pd.Series([True,True,False,False], index=[1,2,3,4])
y = pd.Series([True,True,False,False], index=[1,2,3,4])
print(x & y)
Run Code Online (Sandbox Code Playgroud)
版画
1 True
2 True
3 False
4 False
dtype: bool
Run Code Online (Sandbox Code Playgroud)
但np.logical_and.reduce([x,y])引发了一个ValueError
print(np.logical_and.reduce([x,y]))
File "/data1/unutbu/.virtualenvs/dev/local/lib/python2.7/site-packages/pandas-0.13.0_98_gd9b0c1f-py2.7-linux-i686.egg/pandas/core/generic.py", line 665, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3182 次 |
| 最近记录: |