我有一个pandas数据帧和一个列表如下
mylist = ['nnn', 'mmm', 'yyy']
mydata =
xxx yyy zzz nnn ddd mmm
0 0 10 5 5 5 5
1 1 9 2 3 4 4
2 2 8 8 7 9 0
现在,我想只获取mylist
中提到的列并将其另存为csv文件。
即
yyy nnn mmm
0 10 5 5
1 9 3 4
2 8 7 0
我目前的代码如下。
mydata = pd.read_csv( input_file, header=0)
for item in mylist:
mydata_new = mydata[item]
print(mydata_new)
mydata_new.to_csv(file_name)
在我看来,我的新数据框产生了错误的结果。我在哪里弄错了?请帮帮我!
答案 0 :(得分:7)
您的chapterbib
之一缺少额外的yyy
; - )
使用y
并使用df.columns.str.contains
进行过滤。
loc
这应该是您正在寻找的结果。对结果的后续df.loc[:, df.columns.str.contains('|'.join(mylist))]
yyyy nnn mmm
0 10 5 5
1 9 3 4
2 8 7 0
调用将生成您的CSV文件。
如果您的to_csv
元素是拼写错误,而您实际上是yyy
,那么只需将列表作为索引器传递就可以了 -
yyyy
如果您需要在列表中处理不存在的列名称,请尝试使用df[['nnn', 'mmm', 'yyyy']]
nnn mmm yyyy
0 5 5 10
1 3 4 9
2 7 0 8
进行过滤 -
df.columns.isin
答案 1 :(得分:2)
您可以将mylist
放在[]
内,而pandas会为您选择它。
mydata_new = mydata[mylist]
不确定您的yyy
是否是拼写错误。
你错了的原因是你每次都在循环中为新系列分配mydata_new
。
for item in mylist:
mydata_new = mydata[item] # <-
因此,它会创建一个系列,而不是你想要的整个df。
如果列表中的某些名称不在您的数据框中,您可以随时查看,
len(set(mylist) - set(mydata.columns)) > 0
并打印出来
print(set(mylist) - set(mydata.columns))
然后查看是否存在拼写错误或其他意外行为。