Pandas - 去除空白
Posted
技术标签:
【中文标题】Pandas - 去除空白【英文标题】:Pandas - Strip white space 【发布时间】:2017-09-06 00:31:39 【问题描述】:我正在使用 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
s 的一个例子:
37 78973 3
23787
2 22 3
123
有没有办法让csvkit
做到这一点并为我节省一步?
【问题讨论】:
df1.employee_id = df1.employee_id.str.strip()
skipinitialspace=True
中的read_csv
怎么样?
【参考方案1】:
在 pandas 数据框中删除空白的最佳和最简单的方法是:-
df1 = pd.read_csv('input1.csv')
df1["employee_id"] = df1["employee_id"].str.strip()
就是这样
【讨论】:
【参考方案2】:您可以将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)
【讨论】:
【参考方案3】:您可以使用.str.strip()strip()
在 Pandas 中使用整个系列:
df1['employee_id'] = df1['employee_id'].str.strip()
df2['employee_id'] = df2['employee_id'].str.strip()
这将删除employee_id
列中df1
和df2
中的前导/尾随空格
或者,您可以修改您的 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(" ","")
【讨论】:
如果空格不是尾随或前导,这种方法是否仍然有效?即'23 4883 2'? 没有。strip()
仅适用于前导和尾随空格。
我可以改用正则表达式或类似的吗?
@fightstarr20,查看我的最新编辑。这将空格替换为空。这是否实现了您正在寻找的东西?您的列仍将是一个字符串,但您可以在删除空格后使用astype(int)
解决该问题。
那太好了,谢谢你的例子,我相信 split() 解决方案在某些时候也会派上用场【参考方案4】:
Df['employee']=Df['employee'].str.strip()
【讨论】:
以上是关于Pandas - 去除空白的主要内容,如果未能解决你的问题,请参考以下文章