如何转换也包含整数的NaN的年份行?

时间:2018-09-21 19:41:28

标签: python pandas dataframe

这是我的数据帧(移民)的头:

    nan 1850.0  1851.0  1852.0  1853.0  1854.0  1855.0  1856.0  1857.0  1858.0  ... 2008.0  2009.0  2010.0  2011.0  2012.0  2013.0  2014.0  2015.0  2016.0  2017.0
0   NaN 1850.000000 1851.000000 1852.000000 1853.000000 1854.000000 1855.000000 1856.000000 1857.000000 1858.000000 ... 2008.000000 2009.000000 2010.000000 2011.000000 2012.000000 2013.000000 2014.000000 2015.000000 2016.000000 2017.000000
1   California  0.235450    0.282475    0.311489    0.331177    0.345413    0.356185    0.364622    0.371407    0.376984    ... 0.268349    0.269110    0.271770    0.270484    0.270779    0.268994    0.270921    0.273046    0.272042    0.269457
2   New York    0.211768    0.217419    0.222798    0.227924    0.232815    0.237486    0.241952    0.246226    0.250320    ... 0.212731    0.213811    0.221615    0.221817    0.226076    0.223056    0.226143    0.228841    0.229732    0.228741
3   New Jersey  0.122454    0.130429    0.137851    0.144774    0.151249    0.157317    0.163015    0.168377    0.173430    ... 0.199191    0.202058    0.209573    0.214619    0.212452    0.216395    0.219366    0.220733    0.225400    0.228197

我想做的是: 1)删除开头的“ nan”,并将其替换为“ Country”一词 2)我想摆脱标题中数字的小数点,因为那是年份

我尝试过:

immigration.columns = pd.to_numeric(immigration.iloc[0], downcast='integer', errors='coerce')

也:

immigration.iloc[0].astype(int)

这些都不起作用。

1 个答案:

答案 0 :(得分:1)

免责声明
我个人建议在源头修复此数据,这样,一旦将其读入DataFrame,就不必处理此类数据清除。如果那不是一种选择,则可以使用这种方法。


首先,将NaN替换为Country标头:

df.columns = df.iloc[0].fillna('Country').astype(str).values

      Country       1850.0       1851.0       1852.0       1853.0       1854.0       1855.0
0         NaN  1850.000000  1851.000000  1852.000000  1853.000000  1854.000000  1855.000000
1  California     0.235450     0.282475     0.311489     0.331177     0.345413     0.356185
2    New York     0.211768     0.217419     0.222798     0.227924     0.232815     0.237486
3  New Jersey     0.122454     0.130429     0.137851     0.144774     0.151249     0.157317

现在使用正则表达式重命名您的列,并切片您的DataFrame:

df.rename(columns=lambda x: re.sub(r'\.\d+', '', x)).iloc[1:]

      Country      1850      1851      1852      1853      1854      1855
1  California  0.235450  0.282475  0.311489  0.331177  0.345413  0.356185
2    New York  0.211768  0.217419  0.222798  0.227924  0.232815  0.237486
3  New Jersey  0.122454  0.130429  0.137851  0.144774  0.151249  0.157317