Разделение столбцов, но создаются не все новые строки

#python #pandas #strsplit

#python #панды #strsplit

Вопрос:

У меня есть csv, который выглядит следующим образом:

     FIPS     display_name               Value
    2013    "Aleutians East, (AK)"      172.9
    2016    "Aleutians West, (AK)"      172.2 
  

Я хочу разделить столбец на 2 столбца. Я попробовал это:

 df['county','state'] = df['display_name'].str.split(', ',expand=True)
  

Результат был таким:

 cnty_fips   display_name    Value   (county, state)
2013    "Aleutians East    172.9    "Aleutians East
2016    "Aleutians West    172.2    "Aleutians West
  

Не уверен, почему вторая половина данных стирается и не преобразуется в новый столбец.
Как я могу получить два новых столбца, когда я разделяю столбец, в котором один указывает округ, а другой — штат?

Ответ №1:

Проблема здесь в том, что str.split возвращает два столбца, но вы пытаетесь присвоить это значение одному столбцу. Следующее должно привести к желаемому результату.

 temp = df.display_name.str.split(", ", expand=True)
temp.columns = ["county", "state"]

pd.concat([df.drop("display_name", axis=1), temp], axis=1)

   FIPS  value          county state
0  2013  172.9  Aleutians East  (AK)
1  2016  172.2  Aleutians West  (AK)
  

Ответ №2:

Когда вы разбиваете столбец на два отдельных столбца, вам необходимо сохранить их в двух отдельных столбцах. В вашем случае вы сохраняете его в столбцах, но не переносите его в фрейм данных.

 df = pd.DataFrame({'Fips': [2013,2016], 
                   'display_name': ["Aleutians East, (AK)","Aleutians West, (AK)"],
                   'value': [172.9,172.2]})
df[['county','state']] = df['display_name'].str.split(',',expand=True)
  

Обратите внимание, что два столбца объединены во фрейм данных как df[['county','state']] , в то время как вы просто записали его как df['county','state'] .

Вывод выглядит следующим образом:

    Fips          display_name  value          county  state
0  2013  Aleutians East, (AK)  172.9  Aleutians East   (AK)
1  2016  Aleutians West, (AK)  172.2  Aleutians West   (AK)
  

Если вы хотите удалить исходный столбец перед разделением

 df = df.drop('display_name',axis=1)
print(df)
   Fips  value          county  state
0  2013  172.9  Aleutians East   (AK)
1  2016  172.2  Aleutians West   (AK)