这是我的数据帧(移民)的头:
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)
这些都不起作用。
答案 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