#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)