我有一个数据框,其中包含一列用逗号分隔的值。我想将该列中的字符串值转换为整数。
我一般都对编码不熟悉,因此将不胜感激地简要说明正在发生的事情。如果有时间。
我尝试了以下代码。
{{1}}
答案 0 :(得分:6)
我认为您的解决方案实际上应该是:
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
:将要传递的分隔符(现在要创建''
的情况下,将现在的一系列列表中的元素与传递的分隔符ints
连接起来。最后.astype(int)
将每个字符串转换为整数
答案 1 :(得分:4)
该问题已经有了答案,但是,我想添加另一个解决方案:
DataFrame:
>>> 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
OR
另一种将df.replace
与regex方法一起使用作为正则表达式替换的方法是在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
答案 2 :(得分:2)
简要说明:
df['col3'].str.strip(',').str.join('').astype(int)
df['col3']
根据pandas.Series
的值生成col3
_______.str
可以理解为强制转换为字符串,通常意味着您希望对系列内容使用字符串方法_____.str.strip(',')
使用strip
方法:使用提供的分隔符作为用于区分一个子字符串何时结束和下一个子字符串何时开始的参数,将字符串分成子字符串_____.str.strip(',').str.join('')
提取拆分生成的子字符串并将它们串联在一起(实际上,您只是在删除分隔符)____.astype(int)
将结果转换为整数请在加入join
时加入尼克松,以生成实际所需的输出。希望这对您有所帮助,编码愉快!
答案 3 :(得分:0)
所有的答案都是在从 csv 或 excel 等源读取数据后解决它的。查看问题的另一种方法是在从源读取期间对数据进行规范化。以下是使用 read_csv 或 read_excel 时的操作方法
pd.read_csv('your_file_name', thousands=',')
pd.read_excel('your/file/name', thousands=',')
参见熊猫文档 read_excel 和 read_csv