2017-07-19 71 views
1

我試圖讀取一個csv文件並將該文件的特定行寫入另一個文件。寫入csv中的多列

的代碼運行正常,但輸出的格式不正確:

import pandas as pd 
import sys 

f = open("output.csv", 'w') 
sys.stdout = f 

df = pd.read_csv('original_file.csv', low_memory=False) 

print df[(df.name == 'fullName')] 
print df[(df.name == 'LastName')] 

f.close() 

在原始文件有多個列,無不洋溢着琴絃。我想打印name列等於fullNameLastName的每一行。然而,output.csv已將所有數據擠在一個列中。

我在使用Vim的Ubuntu上完成了所有這些工作。我不知道這是否會有所作爲。

如何獲得輸出數據寫入其相應的列output.csv

+3

任何理由不使用'to_csv'方法? https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html –

+0

'print df [(df.name =='fullName')|(df.name =='LastName' )]' – DyZ

+0

@AdrienMatissart我以前曾嘗試過使用它,但我無法搜索單元格中的值,例如'fullName'等。我確信有一種方法,但我對熊貓不夠熟悉。 – Wood

回答

2

這應該工作:

df = pd.read_csv('original_file.csv', low_memory=False) # read dataframe 
new_df = df.loc[(df.name == 'fullName')|(df.name == 'LastName')] # select rows with name == fullname or lastname 
new_df.to_csv("output.csv", index=False) # write to csv 
+0

謝謝。這是我的問題的完美解決方案。我一直在爲此掙扎近一週。 – Wood

+1

不客氣。不要等到下一次整整一週尋求幫助:) –

+0

哈哈。我一整週都在問。你是第一個似乎理解這個問題的人。我的問題將被降低並標記爲重複。 – Wood

0

我解決方案的最後一行是錯誤的。由於運算符優先規則,布爾數組正在與數據幀列進行比較,這不是人們可能要查找的內容。

你在做什麼本質上是你順序寫兩列。請嘗試以下操作:

import pandas as pd 

# read file 
df = pd.read_csv('original_file.csv', low_memory=False) 

# write select columns of the dataframe to output.csv 
df[df['name'] == 'fullName' | df['name'] == 'LastName' ].to_csv('output.csv') 
+0

我最初的解決方案是錯誤的,已修改。 –

+1

'df [df ['name'] =='fullName'| df ['name'] =='LastName']'不會按預期工作 - 您需要添加圓括號。 PS是不是我已經downvoted你的答案... – MaxU

+0

@MaxU感謝您的評論! –