Как я могу преобразовать ряд лет, который также содержит NaN в целых числах?

1

Это глава моего фреймворка (иммиграция):

    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) Избавьтесь от этого "нана" в начале и замените его словом "Страна" 2) Я хотел бы избавиться от десятичных точек в числах в заголовке, поскольку те лет

Я старался:

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

Также:

immigration.iloc[0].astype(int)

Ни один из них не работал.

  • 0
    Можете ли вы опубликовать свой DataFrame как текст, а не как изображение
  • 0
    Кроме того, я бы порекомендовал исправить эту проблему, когда вы читаете Данные в, а не пытаться исправить это позже. Это похоже на случай ввода, который должен быть очищен
Показать ещё 1 комментарий
Теги:
pandas
dataframe

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню