为什么我只输出输出文件中的最后一个输出?

时间:2015-03-04 22:00:00

标签: python pandas dataframe

我试图通过在python 2.7中使用pandas,根据列的名称列表找到特定的列。例如,

>>>df = pd.read_csv('database.csv') 
A,B,C,D,E,F,G  # A to G columns in database
1,2,3,4,5,6,7  

>>>name_list = pd.read_csv('column_name.csv') 
Name # 'Name' is set as index 
B    #  I need B, E and F column
E
F

# code used to select particular columns
result = pd.DataFrame()
for col in df.columns:
    if col in name_list.index:
        result = df[[col]]  # select column based on the given list


result.to_csv('result.csv')  # write my result to csv file

print result很好,我可以看到B,E和F列,但是,result.csv文件只有最后一个输出(F列)?我试图将result.to_csv移到不同的位置,但它仍然是相同的。

有谁知道为什么?

1 个答案:

答案 0 :(得分:3)

您每次都会覆盖result,因此您只能获得最后的结果,而且您​​也不需要使用循环,这将有效:

df[name_list.index].to_csv('result.csv')

示例:

In [21]:

import pandas as pd
import io
temp="""A,B,C,D,E,F,G
1,2,3,4,5,6,7"""
temp1="""Name
B
E
F"""
df = pd.read_csv(io.StringIO(temp))
print(df)
name = pd.read_csv(io.StringIO(temp1), index_col=[0])
name
   A  B  C  D  E  F  G
0  1  2  3  4  5  6  7
Out[21]:
Empty DataFrame
Columns: []
Index: [B, E, F]
In [20]:

df[name.index]
Out[20]:
   B  E  F
0  2  5  6

上面显示,没有必要创建另一个df只是为了让你感兴趣的列写出来,一旦你读了你的名字,你就可以传递索引来从子列表中选择感兴趣的列。原始的df,然后把它们写到csv。

修改

如果您的索引中有重复的条目,则可以调用unique来重复删除值:

In [24]:

temp1="""Name
B
B
E
F"""
name = pd.read_csv(io.StringIO(temp1), index_col=[0])
print(name)
df[name.index.unique()]
Empty DataFrame
Columns: []
Index: [B, B, E, F]
Out[24]:
   B  E  F
0  2  5  6