2017-04-10 113 views
2

我使用Python csvkit比較像這樣2個文件:熊貓 - 帶空格

df1 = pd.read_csv('input1.csv', sep=',\s+', delimiter=',', encoding="utf-8") 
df2 = pd.read_csv('input2.csv', sep=',\s,', delimiter=',', encoding="utf-8") 
df3 = pd.merge(df1,df2, on='employee_id', how='right') 
df3.to_csv('output.csv', encoding='utf-8', index=False) 

目前我通過手前的腳本,去掉從employee_id列空間運行該文件。

employee_id一個例子:

37 78973 3 
23787 
2 22 3 
123 

有沒有辦法讓csvkit做到這一點,拯救我的一個步驟?

+0

'df1.employee_id = df1.employee_id.str.strip()' – Taylor

+1

'read_csv'中的'skipinitialspace = True'怎麼辦? –

回答

4

可以strip()在熊貓的整個系列採用.str.strip()

df1['employee_id'] = df1['employee_id'].str.strip() 
df2['employee_id'] = df2['employee_id'].str.strip() 

這將刪除前導/兩df1df2

或者尾隨在employee_id欄的空格,您可以修改您read_csv線也可用skipinitialspace=True

df1 = pd.read_csv('input1.csv', sep=',\s+', delimiter=',', encoding="utf-8", skipinitialspace=True) 
df2 = pd.read_csv('input2.csv', sep=',\s,', delimiter=',', encoding="utf-8", skipinitialspace=True) 

它看起來像你試圖刪除包含數字的字符串中的空格。

df1['employee_id'] = df1['employee_id'].str.replace(" ","") 
df2['employee_id'] = df2['employee_id'].str.replace(" ","") 
+0

如果空間不是尾隨或領先,這種方法是否仍然有效?即'23 4883 2'? – fightstarr20

+0

編號'strip()'僅適用於前導空白和尾隨空白。 – Andy

+0

我可以使用正則表達式或類似的方法嗎? – fightstarr20

2
Df['employee']=Df['employee'].str.strip() 
4

你可以做strip()pandas.read_csv()爲:您可以通過這樣做

pandas.read_csv(..., converters={'employee_id': str.strip}) 

如果你只需要剝離前導空格:

pandas.read_csv(..., converters={'employee_id': str.lstrip}) 

而且刪除所有空間:

def strip_spaces(a_str_with_spaces): 
    return a_str_with_spaces.replace(' ', '') 

pandas.read_csv(..., converters={'employee_id': strip_spaces})