【问题标题】:How to stop NAN appearing in DataFrame如何阻止 NAN 出现在 DataFrame 中
【发布时间】:2019-06-18 06:18:12
【问题描述】:

我正在使用 api 来提取 json 文件/python 字典。当我尝试将它带到熊猫数据框时,我遇到了问题

我正在使用 python 请求库使用嵌套在 json.loads() 方法中的 requests.get().text 从地址获取字典。

我尝试了以下方法:

#Request_data
jsonfile = json.loads(requests.get(address).text)

方法1

df=json_normalize(jsonfile,record_path='history',meta['open','close','high','low','volume'],errors='ignore')

方法2

df=json_normalize(jsonfile,meta['open','close','high','low','volume'],errors='ignore')

当我尝试方法 1 时,我得到一个表格,列中有日期,开盘价、收盘价、最高价、最低价和成交量作为列标题,但是单元格中的值是 NaN

当我尝试 method2 时,我得到一行和很多列,每个日期都有一个开盘、收盘、最高、最低和成交量列。

【问题讨论】:

  • 如果没有您使用的文件,很难帮助您...
  • 谢谢@BenPap 我附上了 json 的 sn-p:- `'name': 'AAPL', 'history': {'2019-04-26': {'open': ' 204.90','收盘':'204.30','高':'205.00','低':'202.12','成交量':'18649102'},'2019-04-25':{'开盘':' 206.83','收盘':'205.28','高':'207.76','低':'205.12','成交量':'18543206'},'2019-04-24':{'开盘':' 207.36', 'close': '207.16', 'high': '208.48', 'low': '207.05', 'volume': '17540609'}, `
  • 所以问题是你的 json 是如何格式化的。如果是 {name: AAPL, history: [{date:2019-04-26, open: 204.90' ect ect}, {date: 2019-04-27, ect ect]} 那么方法 1 就可以了。如果您愿意,可以使用正则表达式来操作 json 文本,然后使用 json_normalize 导入它。

标签: python json pandas dataframe


【解决方案1】:

理解您的数据并不容易,但我建议您可以通过迭代您的 json 数据来创建每一列。您可以在 for 循环中检查 NaN 的来源。

例如:

df = pd.DataFrame()
col_1, col_2 = [], []

for element in jsonfile:
    col_1.append(element['col_1'])
    col_2.append(element['col_2'])

df['col_1'] = col_1
df['col_2'] = col_2

希望这对你有帮助。

【讨论】:

    【解决方案2】:

    @thisray 感谢您花时间回答。赞赏。我想出了这个答案,它可以解决问题,让我知道你的想法。

    jsonfile = requests.get(URL)
    fin_dict = jsonfile.json()
    fin_history_dict = fin_dict['history']
    historic_data = list(fin_history_dict.values())
    df=pd.DataFrame(data = historic_data,index=fin_dict['history'])
    

    【讨论】:

      猜你喜欢
      • 2012-04-02
      • 2017-01-08
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多