【问题标题】:"Transpose" an array after loads a json file in python?在python中加载一个json文件后“转置”一个数组?
【发布时间】:2021-04-17 03:17:50
【问题描述】:

我有一个data.csv文件,其中包含1列json类型的调用数据趋势,它的每一行是:

 1. [{"period":"11/2020", "UNTPRICE": 49940000,"DIST_UNTPRICE": 30789500},
     {"period":"12/2020", "UNTPRICE": 48710000,"DIST_UNTPRICE": 30719773}]
 2. [{"period":"12/2020", "UNTPRICE": 28540000,"DIST_UNTPRICE": 27428824}]
 3. [{"period":"12/2020", "UNTPRICE": 27428824,"DIST_UNTPRICE": 28540000}]

这里的问题是如何在python中将此列转换为这样的数组

|UNTPRICE(11/2020)|DIST_UNTPRICE(11/2020)|UNTPRICE(12/2020)|DIST_UNTPRICE(12/2020)|
|-----------------|----------------------|-----------------|----------------------|
|     4994000     |        30789500      | 48710000        | 30719773             |
|     NULL        |        NULL          |28540000         |27428824              |
|     NULL        |        NULL          |27428824         |28540000              |

csv 文件的示例原始图像

【问题讨论】:

  • csv中真的有数字1、2、3吗?请只发布 csv 的原始内容。
  • 你在用熊猫吗?它有一个pivot 函数。
  • @Barmar 你能详细解释一下吗
  • @bremen_matt 我刚刚编辑过

标签: python


【解决方案1】:

首先,编写一个函数,将csv文件中的一行转换为数据框中的一行:

import json

def csv_row_to_df_row(csv_row):
    csv_row = json.loads(csv_row)
    df_row = {}
    for entry in csv_row:
        period = entry['period']
        for k, v in entry.items():
            if k != 'period':
                df_row[f'{k}({period})'] = int(v)
    return df_row

然后您可以迭代文件中的所有行并将这些行添加到您的数据框中。

import pandas as pd

df = pd.DataFrame()
with open('yourfile.csv') as f:
    for csv_row in f:
        df_row = csv_row_to_df_row(csv_row)
        df = df.append(df_row, ignore_index=True)

要获得与所需输出中相同的列顺序:

df = df[['UNTPRICE(11/2020)', 'DIST_UNTPRICE(11/2020)', 'UNTPRICE(12/2020)', 'DIST_UNTPRICE(12/2020)']]

【讨论】:

  • 感谢您的回答,但输出的格式与我想要的不同,其中不包含 NULL 值
  • @Al3xSund3r 使用pandas.DataFrame.append追加时,会自动添加NaN
  • 我想将此添加为新列,在这种情况下附加不起作用
  • @Al3xSund3r 我已经编辑了答案,现在可以用了吗?
  • 例如我的csv文件在第3列包含5列和json字符串,我该怎么做
【解决方案2】:

首先使用pandas加载json

import pandas as pd
df = pd.read_json('data.json')

然后转置dataframe 使用:

df.T

【讨论】:

    猜你喜欢
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 2018-09-20
    • 1970-01-01
    • 2021-01-22
    • 2013-09-29
    相关资源
    最近更新 更多