在Python/Panda中从CSV中提取包含在="”中的值

xzlaal3s  于 11个月前  发布在  Python
关注(0)|答案(3)|浏览(83)

这里有一个CSV的例子(我无法控制它的生成方式,所以我可以调整它)

PackingListNumber;OrderNumber;ArticleId;Artist;Title;Units;MediaType;Price (EUR);EANCode;InfoLine;ReleaseDate;PoReference;ShippedAt;QuantityShipped;TotalPrice (EUR)
2007100976;12669151;1E8085;="WEATHER REPORT";="MR. GONE -COLOURED-";1;LP;="16,9";="8719262030909";="180GR./INSERT/1500 COPIES ON GOLD & BLACK MARBLED VINYL";16-Jun-2023;="";06-Nov-2023;1;="16,9"

字符串
我正在使用panda和它的read_csv,这是结果:png screenshot当然这不是最佳的,所以我正在寻找一种方法来摆脱 Package =""。任何想法,这可以在read_csv级别上完成吗?

nwlqm0z1

nwlqm0z11#

如果您想在read_csv级别进行这种“清理”,可以先读取列并准备转换器。

import pandas as pd

def cleanup(value):
    if type(value) != str or value[0] != "=":
        return value

    return value[2:-1]

# first extract all the columns using the header (row number 0)
columns = pd.read_csv("data.csv", sep=";", nrows=0).columns
# then apply the cleanup method
df = pd.read_csv("data.csv", sep=";", converters={col: cleanup for col in columns})

print(df)

字符串
还有另一种解决方案:首先正常读取数组,然后在所有单元格上应用cleanup函数。

import pandas as pd

def cleanup(value):
    if type(value) != str or value[0] != "=":
        return value

    return value[2:-1]

df = pd.read_csv("data.csv", sep=";")
ndf = df.map(cleanup)
print(ndf)

ui7jx7zq

ui7jx7zq2#

  • ..摆脱 Package ="".任何想法,这可以在read_csv级别上完成吗?*

我不确定你是否可以通过调整 * quot 'args * 来做到这一点,但你可以尝试this regex separator

df = pd.read_csv("in.csv", sep=r'"?[;"]=?"?', engine="python", index_col=False)

字符串
输出量:

print(df)

   PackingListNumber  OrderNumber  ... QuantityShipped TotalPrice (EUR)
0         2007100976     12669151  ...               1             16,9

[1 rows x 15 columns]


对比表:
| [* sep *]|艺术家|标题|价格(EUR)|EANCode| Infoline| PoReference|总价(欧元)|
| - -|- -|- -|- -|- -|- -|- -|- -|
| ;个|="天气预报"|="消失先生-有色-"|="16,9"|2019 - 10 - 19 00:00:00| ="180 GR./纸/1500份金色和黑色大理石乙烯基"|- -|="16,9"|
| regex的|天气报告|消失先生-有色-|16.9| 8719262030909| 180 GR./纸/1500份金色和黑色大理石乙烯基||16.9|

slhcrj9b

slhcrj9b3#

一行代码:

df = df.applymap(lambda x: x.lstrip('="').rstrip('"') if isinstance(x, str) else x) # remove =""

字符串

测试代码:

import pandas as pd

df = pd.read_csv("input.csv", sep=";")
df = df.applymap(lambda x: x.lstrip('="').rstrip('"') if isinstance(x, str) else x) # remove =""

new_file_path = 'new_file.csv'
df.to_csv(new_file_path, index=False, sep=';', encoding='utf-8')

输出:

PackingListNumber;OrderNumber;ArticleId;Artist;Title;Units;MediaType;Price (EUR);EANCode;InfoLine;ReleaseDate;PoReference;ShippedAt;QuantityShipped;TotalPrice (EUR)
2007100976;12669151;1E8085;WEATHER REPORT;MR. GONE -COLOURED-;1;LP;16,9;8719262030909;180GR./INSERT/1500 COPIES ON GOLD & BLACK MARBLED VINYL;16-Jun-2023;;06-Nov-2023;1;16,9

相关问题