我正在尝试搜索数据框中一行中所有列的文本“总计”。
def f(row):
for i in range(0,len(row))
if re.search('Total', row[i]) is None:
return False
else:
return True
data['newColumn'] = data.apply(f, axis=1)
假设在数据帧中每行调用一次函数f是否正确?
我的newColumn只会从数据框的第一列获取总数,即使len(row)实际返回正确的列数。
添加打印(row [i])也会打印出正确的值。但是,对于新列的分配仅为True,其中Total位于第一列的文本中。我似乎也无法迭代传递给函数的行。它有类型系列。
答案 0 :(得分:1)
由于循环内的两个case都有一个return语句,因此该函数将始终在第一列之后返回。
请改为尝试:
import pandas as pd
df = pd.DataFrame({"row_1": ["foo", "Total", "bar"],
"row_2": ["Total", "foo", "bar"]})
df["is_total_in_row"] = df.apply(
lambda row : "Total" in list(row), axis=1)
print(df)
返回
row_1 row_2 is_total_in_row
0 foo Total True
1 Total foo True
2 bar bar False
答案 1 :(得分:1)
从@Sumido借用样本数据集:
In [43]: df['newColumn'] = df.select_dtypes(['object']).sum(1).str.contains('Total')
In [44]: df
Out[44]:
row_1 row_2 newColumn
0 foo Total True
1 Total foo True
2 bar bar False
说明:
In [50]: df.select_dtypes(['object']).sum(1)
Out[50]:
0 fooTotal
1 Totalfoo
2 barbar
dtype: object