我有一个包含许多列的csv文件,但为了简单起见,我只使用3列来解释问题。列名是' user',' A'和' B'。我已经使用pandas中的read_csv函数读取了该文件。数据存储为数据框。
现在我想根据它们的值删除此数据框中的某些行。因此,如果A列中的值不等于a而B列不等于b,我想跳过这些用户行。
问题是我想动态创建一个数据帧,我可以一次追加一行。另外我不知道会有多少行。因此,我无法在定义数据帧时指定索引。
我使用以下代码:
import pandas as pd
header=['user','A','B']
userdata=pd.read_csv('.../path/to/file.csv',sep='\t', usecols=header);
df = pd.DataFrame(columns=header)
for index, row in userdata.iterrows():
if row['A']!='a' and row['B']!='b':
data= {'user' : row['user'], 'A' : row['A'], 'B' : row['B']}
df.append(data,ignore_index=True)
'数据'正在填充,但我无法追加。最后,df变空了。
任何帮助都将不胜感激。
提前谢谢。
答案 0 :(得分:1)
关于您的直接问题,append()
不会修改DataFrame;它返回一个新的。因此,您必须通过以下方式重新分配df
df = df.append(data,ignore_index=True)
但更好的解决方案是完全避免迭代,只需查询所需的行。例如:
df = userdata.query('A != "a" and B != "b"')