我在Pandas数据框中遇到了一些索引问题。我要做的是从JSON文件加载数据,创建Pandas数据框,然后从该数据框中选择特定字段并将其发送到我的数据库。
以下是指向JSON文件中的内容的链接,以便您可以看到实际存在的字段: https://pastebin.com/Bzatkg4L
import pandas as pd
from pandas.io import sql
import MySQLdb
from sqlalchemy import create_engine
# Open and read the text file where all the Tweets are
with open('US_tweets.json') as f:
tweets = f.readlines()
# Convert the list of Tweets into a structured dataframe
df = pd.DataFrame(tweets)
# Attributes needed should be here
df = df[['created_at', 'screen_name', 'id', 'country_code', 'full_name', 'lang', 'text']]
# To create connection and write table into MySQL
engine = create_engine("mysql+pymysql://{user}:{pw}@localhost/{db}"
.format(user="blah",
pw="blah",
db="blah"))
df.to_sql(con=engine, name='US_tweets_Table', if_exists='replace', flavor='mysql')
感谢您的帮助!
答案 0 :(得分:1)
Pandas没有将JSON文件中的每个对象映射到数据框中的列。您的示例文件包含24列:
with open('tweets.json') as f:
df = pd.read_json(f, lines = True)
df.columns
返回:
Index(['contributors', 'coordinates', 'created_at', 'entities',
'favorite_count', 'favorited', 'geo', 'id', 'id_str',
'in_reply_to_screen_name', 'in_reply_to_status_id',
'in_reply_to_status_id_str', 'in_reply_to_user_id',
'in_reply_to_user_id_str', 'is_quote_status', 'lang', 'metadata',
'place', 'retweet_count', 'retweeted', 'source', 'text', 'truncated',
'user'],
dtype='object')
为了深入研究JSON数据,我找到了这个解决方案,但我希望存在一种更优雅的方法:How do I access embedded json objects in a Pandas DataFrame?
例如,df['entities'].apply(pd.Series)['urls'].apply(pd.Series)[0].apply(pd.Series)['indices'][0][0]
返回117
。
要访问full_name
并将其复制到df,请尝试以下操作:
df['full_name'] = df['place'].apply(pd.Series)['full_name']
,返回0 Austin, TX
。