如何使我的 JSON 文件在我的 pandas 数据帧中可读?

How do I make my JSON file readable in my pandas dataframe?

提问人:Lilcodemuffin 提问时间:10/31/2023 更新时间:10/31/2023 访问量:45

问:

这是我的代码:

with open(r'unique_columns.json', 'r') as f:
    config = json.load(f)

unique_col_comb = config['Unique_Column_Combination']['TABLE_NAME']

df = pd.read_csv(f's3://path/to/file.csv', sep='|')
df_unique = df.set_index([unique_col_comb]).index.is_unique
print(df_unique)

我的 JSON 如下所示:

{
    "Unique_Column_Combination":
    {
        "TABLE_NAME": "COL1, COL2, COL3"
    }

}

我收到错误:

KeyError: "None of ['COL1, COL2, COL3'] are in the columns"

但是当我实际写出 中的列时,代码可以工作:df_unique

df_unique = df.set_index(['COL1', 'COL2', 'COL3']).index.is_unique
>>True

我想我需要在我的 JSON 文件中每个列名的末尾添加一个额外的引号 (“),但这样它就不会采用正确的 JSON 格式。我可以在 python 代码中添加它吗?或者我需要将我的 JSON 字典转换为 python 列表吗?

Python JSON 熊猫

评论

0赞 MatBailie 10/31/2023
请提供实际可读数据的样本。它不一定是真实的,只是代码实际可以使用的东西。请阅读最小可重复示例

答:

2赞 Anonymous 10/31/2023 #1

"COL1, COL2, COL3"是单个字符串。您可能应该将其拆分为三个列名unique_col_comb.split()

评论

0赞 Lilcodemuffin 10/31/2023
感谢您的回复。我在这里添加了它,但现在我收到错误.我以为它会单独阅读 3 列df_unique = df.set_index([unique_col_comb.split()]).index.is_uniqueValueError: Length mismatch: Expected 2 rows, received array of length 3
0赞 Lilcodemuffin 10/31/2023
没关系,我看到这个问题,它打印出这样的列:所以我必须去掉一个额外的逗号['COL1,', 'COL2,', 'COL3,']
0赞 Lilcodemuffin 10/31/2023
我把它改成了,它仍然给出同样的错误,我想我必须弄清楚其他事情......df_unique = df.set_index([unique_col_comb.split(", ")]).index.is_uniqueValueError: Length mismatch: Expected 2 rows, received array of length 3
0赞 Anonymous 11/1/2023
啊,你不需要拆分周围的方括号,因为它的输出已经是一个列表了。
0赞 Lilcodemuffin 11/1/2023
哦,我的天哪,这就是问题所在!你是对的!谢谢!
0赞 D.L 10/31/2023 #2

json 不会分解为数据帧。

下面是一个可以阅读的 json 示例:

import pandas as pd
import json

json_string = """
{
  "employees": [
    {
      "name": "John Doe",
      "email": "[email protected]",
      "phone": "555-555-5555"
    },
    {
      "name": "Jane Doe",
      "email": "[email protected]", 
      "phone": "444-444-4444"
    }
  ]
}
"""

j = json.loads(json_string)

df = pd.DataFrame(j['employees'])
print(df)

我没有在示例中提及,因为这部分有效,并且是失败的格式。df.read_json()json

在您的示例中,如果添加方括号,则此 json 将起作用,例如:

{
    "Unique_Column_Combination":[
    {
        "TABLE_NAME": "COL1, COL2, COL3"
    }
    ]
}

给出这个:

         TABLE_NAME
0  COL1, COL2, COL3

评论

0赞 Lilcodemuffin 10/31/2023
现在它说TypeError: list indices must be integers or slices, not str
0赞 D.L 10/31/2023
@Lilcodemuffin,这取决于数据的结构以及您想要实现的目标。在修改给定 JSON 的示例代码中,只有一列(称为“TABLE_NAME”)......因此,也许最好像答案上半部分的示例一样格式化......