【问题标题】:Converting pandas column of comma-separated strings into integers将逗号分隔字符串的熊猫列转换为整数
【发布时间】:2018-12-21 14:38:53
【问题描述】:

我有一个数据框,其中包含一列以逗号分隔的值。我想将该列中的字符串值转换为整数。

我对一般的编码很陌生,所以对正在发生的事情的简要解释将不胜感激。如果你有时间。

我已经尝试了以下代码。

df['col3'].str.strip(',').astype(int)

df
col1 col2 col3
1    x    12,123
2    x    1,123
3    y    45,998

df
col1 col2 col3
1    x    12123
2    x    1123
3    y    45998

【问题讨论】:

  • 不要将 SOLVED 添加到问题的标题中,这样就足以将响应标记为正确。如果你想感谢最好的人就是投赞成票,为此你必须赢得声誉。
  • 您是用pd.read_csvpd.read_table 创建这个DataFrame 的吗?然后,您可以通过将 thousands=',' 作为参数添加到这些方法来绕过所有这些。
  • @ALollz 我使用了 pd.read_csv。我将如何使用数千个参数?感谢您的帮助。
  • @eyllanesc 道歉。谢谢你教我论坛礼仪。
  • 将其添加到方法的括号内:pd.read_csv('your_file_name', thousands=',')

标签: python python-3.x pandas


【解决方案1】:

我认为您的解决方案实际上应该是:

df['col3'] = df.col3.str.split(',').str.join('').astype(int)

    col1 col2   col3
0     1    x  12123
1     2    x   1123
2     3    y  45998

作为str.strip 只从左右两侧剥离。

说明

  • str: 允许 Series 的向量化字符串函数
  • split:将根据某种模式拆分列表中的每个元素,在这种情况下为,
  • join:将加入带有传递分隔符的现在 Series 列表中的元素,'' 在此处创建 ints

最后.astype(int) 将每个字符串变成一个整数

【讨论】:

  • 明星!太感谢了。解决了我的问题。
【解决方案2】:

这个问题已经有了答案,但是,我想添加另一个解决方案:

数据帧:

>>> df
   col1 col2    col3
0     1    x  12,123
1     2    x   1,123
2     3    y  45,998

str.replace方法尝试最简单的方法,你就完成了:

>>> df['col3'] = df['col3'].str.replace(",", "")
# df['col3'] = df['col3'].str.replace(",", "").astype(int) <- cast to int
>>> df
   col1 col2   col3
0     1    x  12123
1     2    x   1123
2     3    y  45998

另一个使用df.replace 和正则表达式方法作为正则表达式替换是在后台使用re.sub 执行的。 re.sub的替换规则是一样的。

>>> df['col3'] = df['col3'].replace(',', '', regex=True)
>>> df
   col1 col2   col3
0     1    x  12123
1     2    x   1123
2     3    y  45998

【讨论】:

    【解决方案3】:

    简要说明:

    df['col3'].str.strip(',').str.join('').astype(int)
    
    • df['col3']col3 的值生成 pandas.Series
    • _______.str 可以理解为cast-to-string,通常表示你想对你的系列内容使用字符串方法
    • _____.str.strip(',') 使用strip 方法:将字符串分成子字符串,使用提供的分隔符作为参数,用于区分一个子字符串何时结束和下一个子字符串何时开始
    • _____.str.strip(',').str.join('') 获取拆分生成的子字符串并将它们连接在一起(实际上您只是删除了分隔符)
    • ____.astype(int) 将您的结果转换为 int

    感谢尼克松在包含join 以生成实际所需的输出。希望这会有所帮助,祝您编码愉快!

    【讨论】:

    • 太棒了!非常感谢你提供了这么好的解释。
    • cast-to-string,不完全是,这只是意味着您正在查询“字符串访问器”,它是系列上字符串操作的网关。
    • 不完全同意,因此“可以理解”序言呵呵
    【解决方案4】:

    所有答案都是在从 csv 或 excel 等源读取数据后解决它。另一种看待问题的方法是在从源读取期间对数据进行规范化。以下是使用 read_csv 或 read_excel 时的操作

    pd.read_csv('your_file_name', thousands=',')
    pd.read_excel('your/file/name', thousands=',')
    

    请参阅熊猫文档read_excelread_csv

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      相关资源
      最近更新 更多