【问题标题】:Pandas - Strip white spacePandas - 去除空白
【发布时间】: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_ids 的一个例子:

37 78973 3
23787
2 22 3
123

有没有办法让csvkit 做到这一点并为我节省一步?

【问题讨论】:

  • df1.employee_id = df1.employee_id.str.strip()
  • skipinitialspace=True 中的read_csv 怎么样?

标签: python csv pandas


【解决方案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 列中df1df2 中的前导/尾随空格

      或者,您可以修改您的 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()
      

      【讨论】:

        猜你喜欢
        • 2021-11-05
        • 2019-08-06
        • 2013-05-14
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多