gpt4 book ai didi

python,读取带有太多分隔符的CSV

转载 作者:行者123 更新时间:2023-11-30 22:40:40 25 4
gpt4 key购买 nike

我正在尝试使用 python 中的 pandas 读取以下格式的日志文件:

TimeStamp, Label, VarName, Data
2017-03-09 13:03:20, USER_INPUT, Name, Test 1
2017-03-09 13:03:20, USER_INPUT, ProjectNumber, 04BGA
2017-03-09 13:03:20, USER_INPUT, PasteType, Senju F100
.
.

在我到达以下类型的行之前工作正常:

2017-03-09 12:03:20, CASETTE_INFO, CassetteHSPGetEjectorFeedAdjust, 2,2,2,2.4,3.5,1.15,1.1

是否可以以某种方式告诉 pandas,如果有超过 3 个分隔符,则将其余的分隔符挤压在一起作为字符串?喜欢

data = "2,2,2,2.4,3.5,1.15,1.1" 

或者还有其他解决办法吗?

我现在只是跳过这些行来解决这个问题

pd.read_csv(filename, error_bad_lines=False)) 

如果能在我的日志文件中解决此类问题就好了

最佳答案

我认为您需要将分隔符更改为 ,\s+ - 这意味着逗号带有一个或多个空格:

df = pd.read_csv(filename, sep=",\s+", engine='python')

示例:

import pandas as pd
from pandas.compat import StringIO

temp=u"""imeStamp, Label, VarName, Data
2017-03-09 13:03:20, USER_INPUT, Name, Test 1
2017-03-09 13:03:20, USER_INPUT, ProjectNumber, 04BGA
2017-03-09 13:03:20, USER_INPUT, PasteType, Senju F100
2017-03-09 12:03:20, CASETTE_INFO, CassetteHSPGetEjectorFeedAdjust, 2,2,2,2.4,3.5,1.15,1.1"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep=",\s+", engine='python')
print (df)
imeStamp Label VarName \
0 2017-03-09 13:03:20 USER_INPUT Name
1 2017-03-09 13:03:20 USER_INPUT ProjectNumber
2 2017-03-09 13:03:20 USER_INPUT PasteType
3 2017-03-09 12:03:20 CASETTE_INFO CassetteHSPGetEjectorFeedAdjust

Data
0 Test 1
1 04BGA
2 Senju F100
3 2,2,2,2.4,3.5,1.15,1.1

如果1.解决方案不起作用,请使用数据中没有的分隔符 - ¥| 并将所有数据读取到一列 data 。然后使用str.split :

import pandas as pd
from pandas.compat import StringIO

temp=u"""TimeStamp, Label, VarName, Data
2017-03-09 13:03:20, USER_INPUT, Name, Test 1
2017-03-09 13:03:20, USER_INPUT, ProjectNumber, 04BGA
2017-03-09 13:03:20, USER_INPUT, PasteType, Senju F100
2017-03-09 12:03:20, CASETTE_INFO, CassetteHSPGetEjectorFeedAdjust, 2,2,2,2.4,3.5,1.15,1.1"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep = '¥', names=['data'], skiprows=1)
print (df)
data
0 2017-03-09 13:03:20, USER_INPUT, Name, Test 1
1 2017-03-09 13:03:20, USER_INPUT, ProjectNumber...
2 2017-03-09 13:03:20, USER_INPUT, PasteType, Se...
3 2017-03-09 12:03:20, CASETTE_INFO, CassetteHSP...

df = df.data.str.split(',', n=3, expand=True)
df.columns = ['TimeStamp','Label','VarName','Data']
print (df)
TimeStamp Label VarName \
0 2017-03-09 13:03:20 USER_INPUT Name
1 2017-03-09 13:03:20 USER_INPUT ProjectNumber
2 2017-03-09 13:03:20 USER_INPUT PasteType
3 2017-03-09 12:03:20 CASETTE_INFO CassetteHSPGetEjectorFeedAdjust

Data
0 Test 1
1 04BGA
2 Senju F100
3 2,2,2,2.4,3.5,1.15,1.1

关于python,读取带有太多分隔符的CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42851827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com