#python #pandas
#python #pandas
Вопрос:
Я вроде как новичок в python / pandas.
Я преобразовал json в csv. Теперь один столбец по-прежнему выглядит так и содержит несколько атрибутов.
location
0 {'country': 'United States', 'state': 'New Jer...
1 {'country': 'Australia', 'state': 'Queensland'...
2 {'country': 'United States', 'state': 'Texas',...
3 {'country': 'Australia', 'state': None, 'city'...
4 {'country': 'United States', 'state': 'Califor...
По сути, мне нужен простой столбец, содержащий только значение для country в виде строк. Таким образом, это будет выглядеть примерно так:
location
0 United States
1 Australia
2 United States
3 Australia
4 United States
Любая помощь высоко ценится.
Комментарии:
1. Что такое
print (type(df.loc[0, 'location']))
?
Ответ №1:
Если столбец заполнен словарями, используйте:
print (type(df.loc[0, 'location']))
<class 'dict'>
df['location'] = df['location'].str.get('country')
print (df)
location
0 United States
1 Australia
2 United States
3 Australia
4 United States
Если есть строки:
print (type(df.loc[0, 'location']))
<class 'str'>
import ast
df['location'] = df['location'].apply(ast.literal_eval).str.get('country')
print (df)
location
0 United States
1 Australia
2 United States
3 Australia
4 United States
Комментарии:
1. Быстрый последующий вопрос: Ваш ответ сработал отлично. Но теперь я получаю дополнительный первый столбец с именем «Безымянный: 0», который просто содержит индекс (я использовал ваш второй способ со строками). Я могу просто удалить его, но есть ли способ не создавать его в первую очередь?
2. @BenW — Значения похожи
print (df.index)
? И вам нужно избегать этого при записи в файл csv? Затем используйтеdf.to_csv(file, index=False)
Ответ №2:
Вы можете создать фрейм данных непосредственно из списка словарей с похожими ключами. Поэтому вам просто нужно перевести элементы в столбце в форму списка, прежде чем создавать свой новый фрейм данных. Ключи в списке dicts становятся новыми столбцами.
Это можно решить с помощью одной строки кода —
df = pd.DataFrame({'Location':[{'country': 'United States', 'state': 'New Jersey'},
{'country': 'Australia', 'state': 'Queensland'},
{'country': 'United States', 'state': 'Texas'}]})
#Building a dataframe directly from a list of dictionaries with similar keys
df2 = pd.DataFrame(list(df['Location'].values))
print(df2)
country state
0 United States New Jersey
1 Australia Queensland
2 United States Texas
Ответ №3:
Прочитайте Json напрямую, например:
import pandas as pd
df = pd.read_json ('jsnotation.json')
df теперь является фреймом данных. Таким образом, печать даст результат:
Country State
0 USA Texas
1 Australia Qeensland
2 USA California
Теперь вы можете получить желаемый результат, например:
print(df['country'])
Country
0 USA
1 Australia
2 USA
Чтобы изменить заголовок:
df = df.rename(columns={'Country': 'Location'})
Ответ №4:
Я предполагаю, что если вы запустили:
type(df["Location"][0])
в качестве выходных данных вы получите «str» (df — это фрейм данных csv, который вы читаете).
При этом существует 2 способа решения этой проблемы:
- Преобразуйте строки в словари и извлеките пары ключ / значение в столбцы
Вы можете сделать это, выполнив:
import ast
df["location"] = df["location"].apply(lambda x: ast.literal_eval(x))
Это займет каждую строку в вашем фрейме данных и преобразует строковые представления в требуемый словарный тип данных для обработки. Далее мы можем извлечь значения в столбцы вручную, запустив (взяв в качестве примера столбец «страна»):
df['location'] = df['location'].str.get('country')
Что даст вам желаемый результат.
- Избегайте преобразования ваших данных в csv и считывайте напрямую из файла json
Библиотека Pandas включает функцию pd.read_json, которая может обрабатывать .json для фреймов данных pandas.
pd.read_json (r'Path where you saved the JSON fileFile Name.json')