Pandas KeyError:“['值']不在索引中”

时间:2017-11-16 16:42:16

标签: python json pandas

我在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')

感谢您的帮助!

1 个答案:

答案 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