在python中将列includes:=value拆分为多个列

在python中将列includes:=value拆分为多个列,python,Python,我有许多带有“|”分隔符的csv文件,其中一列包括键和值(但不包括json)。我需要读取所有这些csv文件,将该列拆分为多个列(作为列名和给定值的键),并将输出保存在一个大的csv文件中 其中一个csv文件类似于: id | name |消息 12478 | A |{img|u type:=png,key|u id:=f235,客户端状态:=活动,请求状态:=打开} 12598 | B |{img|U类型:=无,地址| id:=c156,客户端|状态:=活动,请求|状态:=关闭} 输出将是:

我有许多带有“|”分隔符的csv文件,其中一列包括键和值(但不包括json)。我需要读取所有这些csv文件,将该列拆分为多个列(作为列名和给定值的键),并将输出保存在一个大的csv文件中

其中一个csv文件类似于:

id | name |消息
12478 | A |{img|u type:=png,key|u id:=f235,客户端状态:=活动,请求状态:=打开}
12598 | B |{img|U类型:=无,地址| id:=c156,客户端|状态:=活动,请求|状态:=关闭}
输出将是:

id | name | Img | type | Key | id | address | id | Client | status | Request | status
12478 | A | png | f235 |空|激活|打开
12598 | B |无|空| c156 |活动|关闭

任何帮助都将不胜感激。

您可以利用熊猫解决您的问题

将熊猫作为pd导入
def拆分到dict(行):
行被拆分=行[1:-1]。拆分(','))
返回指令(
[
i、 strip().split(“:=”)用于第_行中的i已拆分
]
)
df=pd.read_csv('your_file.csv',delimiter=“|”)
new_df=df.message.apply(拆分到dict.apply)(pandas.Series)
最终=局部混凝土([df,新_df],轴=1)
final=final.drop(列=['message'])
final.to_csv('your_splitted_file.csv',sep=“|”,index=False)

您可以利用熊猫解决您的问题

将熊猫作为pd导入
def拆分到dict(行):
行被拆分=行[1:-1]。拆分(','))
返回指令(
[
i、 strip().split(“:=”)用于第_行中的i已拆分
]
)
df=pd.read_csv('your_file.csv',delimiter=“|”)
new_df=df.message.apply(拆分到dict.apply)(pandas.Series)
最终=局部混凝土([df,新_df],轴=1)
final=final.drop(列=['message'])
final.to_csv('your_splitted_file.csv',sep=“|”,index=False)

谢谢您的回复。当所有行都具有相同的键:=值时,它可以正常工作!但我确实有一些其他行,其中有时缺少一个键:=值。在这种情况下,它会给出错误“dictionary update sequence元素#0的长度为1;需要2”。有什么建议吗?请提供这些行的示例,以便我可以重新创建错误?我用你的示例输入尝试了它,第二行没有
key\u id
,但它工作得很好。我检查了我的日志文件(非常大的文件),问题似乎是:有些行断了,例如在一行中我有:client\u status:=active12598 | C |{img\u type:=none,address\u id:=c198,client\u status:=active,request\u status:=open}。所以基本上下一行和上一行是混合的。现在,我必须找到一种方法来忽略这些行,然后再尝试拆分它们。谢谢您的回复。当所有行都具有相同的键:=值时,它可以正常工作!但我确实有一些其他行,其中有时缺少一个键:=值。在这种情况下,它会给出错误“dictionary update sequence元素#0的长度为1;需要2”。有什么建议吗?请提供这些行的示例,以便我可以重新创建错误?我用你的示例输入尝试了它,第二行没有
key\u id
,但它工作得很好。我检查了我的日志文件(非常大的文件),问题似乎是:有些行断了,例如在一行中我有:client\u status:=active12598 | C |{img\u type:=none,address\u id:=c198,client\u status:=active,request\u status:=open}。所以基本上下一行和上一行是混合的。现在,我必须找到一种方法来忽略这些行,然后再尝试拆分它们。