【问题标题】:Pandas - problem with converting column to int after reading csvPandas - 读取csv后将列转换为int的问题
【发布时间】:2020-01-18 16:41:02
【问题描述】:

我正在导入我之前从网站上抓取的 csv 文件。 这些是此文件中的示例行:

年份,选举,teryt_code,powiat,gmina,political_party,n_votes,百分比 2011,sejm,020101,bolesławiecki,Miasto Bolesławiec,Lista nr 1 - Komitet Wyborczy Prawo i Sprawiedliwość - Zarejestrowana,3 496,"22,85" 2011,sejm,020101,bolesławiecki,Miasto Bolesławiec,Lista nr 2 - Komitet Wyborczy Polska Jest Najważniejsza - Zarejestrowana,276,"1,80" 2011,sejm,020101,bolesławiecki,Miasto Bolesławiec,Lista nr 3 - Komitet Wyborczy Sojusz Lewicy Demokratycznej - Zarejestrowana,1 815,"11,86" 2011,sejm,020101,bolesławiecki,Miasto Bolesławiec,Lista nr 4 - Komitet Wyborczy Ruch Palikota - Zarejestrowana,1 867,"12,20" 2011,sejm,020101,bolesławiecki,Miasto Bolesławiec,Lista nr 5 - Komitet Wyborczy Polskie Stronnictwo Ludowe - Zarejestrowana,432,"2,82" 2011,sejm,020101,bolesławiecki,Miasto Bolesławiec,Lista nr 6 - Komitet Wyborczy Polska Partia Pracy - Sierpień 80 - Zarejestrowana,79,"0,52" 2011,sejm,020101,bolesławiecki,Miasto Bolesławiec,Lista nr 7 - Komitet Wyborczy Platforma Obywatelska RP - Zarejestrowana,7 336,"47,94" 2011,sejm,020102,bolesławiecki,Gmina Bolesławiec,Lista nr 1 - Komitet Wyborczy Prawo i Sprawiedliwość - Zarejestrowana,1 043,"26,33" 2011,sejm,020102,bolesławiecki,Gmina Bolesławiec,Lista nr 2 - Komitet Wyborczy Polska Jest Najważniejsza - Zarejestrowana,68,"1,72" 2011,sejm,020102,bolesławiecki,Gmina Bolesławiec,Lista nr 3 - Komitet Wyborczy Sojusz Lewicy Demokratycznej - Zarejestrowana,368,"9,29"

当我用 line 导入它时:

sejm_df = pandas.read_csv('file.csv',encoding='utf-8-sig')

然后用 line 打印出来:

print(sejm_df[0:10].to_string())

打印行:

年选举 teryt_code powiat gmina political_party n_votes 百分比 0 2011 sejm 20101 bolesławiecki Miasto Bolesławiec Lista nr 1 - Komitet Wyborczy Prawo i Sprawied... 3 496 22,85 1 2011 sejm 20101 bolesławiecki Miasto Bolesławiec Lista nr 2 - Komitet Wyborczy Polska Jest Najw... 276 1,80 2 2011 sejm 20101 bolesławiecki Miasto Bolesławiec Lista nr 3 - Komitet Wyborczy Sojusz Lewicy De... 1 815 11,86 3 2011 sejm 20101 bolesławiecki Miasto Bolesławiec Lista nr 4 - Komitet Wyborczy Ruch Palikota - ... 1 867 12,20 4 2011 sejm 20101 bolesławiecki Miasto Bolesławiec Lista nr 5 - Komitet Wyborczy Polskie Stronnic... 432 2,82 5 2011 sejm 20101 bolesławiecki Miasto Bolesławiec Lista nr 6 - Komitet Wyborczy Polska Partia Pr... 79 0,52 6 2011 sejm 20101 bolesławiecki Miasto Bolesławiec Lista nr 7 - Komitet Wyborczy Platforma Obywat... 7 336 47,94 7 2011 sejm 20102 bolesławiecki Gmina Bolesławiec Lista nr 1 - Komitet Wyborczy Prawo i Sprawied... 1 043 26,33 8 2011 sejm 20102 bolesławiecki Gmina Bolesławiec Lista nr 2 - Komitet Wyborczy Polska Jest Najw... 68 1,72 9 2011 sejm 20102 bolesławiecki Gmina Bolesławiec Lista nr 3 - Komitet Wyborczy Sojusz Lewicy De... 368 9,29

但我需要将列 n_votes 转换为整数。我正在尝试这样做:

sejm_df['n_votes'] = sejm_df['n_votes'].astype('int',True)

但只出现错误:

ValueError: int() 以 10 为底的无效文字:'3\xa0496'

【问题讨论】:

  • 您提供的数据格式似乎不正确。似乎有比标题名称更多的列。我已尽我所能修复了您提供的内容,“n_votes”列的数据类型是 int64,只有 df=pd.read_csv('filename.txt', header=0)

标签: python pandas encoding utf-8


【解决方案1】:

实际上,您尝试将 '3 496' 转换为 3496,如果不处理不间断空格,即 '\xa0',则无法实现。您可以先从该列中剥离空间,例如:

df['n_votes'] = df['n_votes'].str.strip()

之后你也许可以进行整数转换

【讨论】:

  • 谢谢。我不知道为什么,但是 strip 函数对我不起作用。我做了同样的事情:sejm_df['n_votes'] = sejm_df['n_votes'].str.replace('\xa0','')跨度>
猜你喜欢
  • 2016-02-06
  • 1970-01-01
  • 2020-04-08
  • 2020-08-24
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 2019-06-17
相关资源
最近更新 更多