0

我在 CSV 文件中有标题,其数据字典格式类似于Panda 数据框中{"Id":"endDate","timeZone":"Z"}的 A{"Id":"status"}列、B 列、 C 列。{"Id":"ipAddress"}如何仅在 CSV 文件的相应列中显示值?

在此处输入图像描述

我试图替换此代码,但似乎无法正常工作。

df1.columns = df1.columns.str.replace(r'{"Id":"$', '')

我只想显示列 A > endDate、B > status 和 C > ipAddress 中的值

在此处输入图像描述

预期输出 在此处输入图像描述

4

1 回答 1

0

您实际上并没有提供 CSV 的第一行,即列名。我已经重建(也选择了管道分离)。 json.loads()将字符串转换为dict然后提取您想要的键值作为字典理解中的列名

import json
df1 = pd.read_csv(io.StringIO("""{"Id":"endDate","timeZone":"Z"}|{"Id":"status"}|{"Id":"ipAddress"}"""), sep="|")
df1 = df1.rename(columns={c:json.loads(c)["Id"] for c in df1.columns})
df1.columns

输出

Index(['endDate', 'status', 'ipAddress'], dtype='object')

增强型

  • 不要重命名没有Id键的列
  • 处理不是dict
import json
df1 = pd.read_csv(io.StringIO("""{"Id":"endDate","timeZone":"Z"}|{"Id":"status"}|{"Id":"ipAddress"}|{"NoId":"skip"}|notJSON"""), sep="|")
def decode(text):
    try:
        return json.loads(str(text))
    except ValueError:
        return {"Id":text}
df1 = df1.rename(columns={c:decode(c)["Id"] for c in df1.columns if "Id" in decode(c).keys()})
df1.columns
于 2021-01-14T21:04:38.877 回答