用python中的特定列名筛选pandas数据帧

2024-04-19 23:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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)

在我看来,我的新数据帧产生了错误的结果。我错在哪里?请帮帮我!


Tags: csv数据pandas列表newitemfilexxx
2条回答

你可以把mylist放在[]里面,熊猫会为你选择它。

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))

然后看看是否有错别字或其他意外行为。

只需将列名列表传递给索引df

df[['nnn', 'mmm', 'yyy']]

   nnn  mmm  yyy
0    5    5   10
1    3    4    9
2    7    0    8

如果需要处理列表中不存在的列名,请尝试使用df.columns.isin-

df.loc[:, df.columns.isin(['nnn', 'mmm', 'yyy', 'zzzzzz'])]

   yyy  nnn  mmm
0   10    5    5
1    9    3    4
2    8    7    0

相关问题 更多 >