我试图通过在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
移到不同的位置,但它仍然是相同的。
有谁知道为什么?
答案 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