Python 熊猫读取csv在固定时间内使用分隔符

Python 熊猫读取csv在固定时间内使用分隔符,python,pandas,csv,logging,Python,Pandas,Csv,Logging,假设我有一个日志文件,每行的结构如下: $date $machine $task_name $loggedstuff 我希望用pd.read_csv'blah.log',sep=r'\s+'来阅读整个内容。问题是,$loggedstuff中有空格,有没有办法将分隔符限制为正好运行3次,这样loggedstuff中的所有内容都将作为单个列显示在数据帧中 我已经尝试使用csv将其解析为列表列表,然后将其输入熊猫,但这很慢,我想知道是否有更直接的方法来实现这一点。谢谢 设置 tmp.txt 密码 返

假设我有一个日志文件,每行的结构如下:

$date $machine $task_name $loggedstuff
我希望用pd.read_csv'blah.log',sep=r'\s+'来阅读整个内容。问题是,$loggedstuff中有空格,有没有办法将分隔符限制为正好运行3次,这样loggedstuff中的所有内容都将作为单个列显示在数据帧中

我已经尝试使用csv将其解析为列表列表,然后将其输入熊猫,但这很慢,我想知道是否有更直接的方法来实现这一点。谢谢

设置 tmp.txt

密码 返回

   a  b  c                        d
1  1  2  3        test1 test2 test3
2  1  2  3  test1 test2 test3 test4

我认为您可以将csv文件的每一行作为单个字符串读取,然后通过正则表达式将结果数据帧转换为3列

df = pd.read_csv('./test.csv', sep='#', squeeze=True)
df = df.str.extract('([^\s]+)\s+([^\s]+)\s+(.+)')
您可以将分隔符更改为文档中未出现的任何分隔符。

使用expand=True时,拆分的元素将展开为单独的列

参数n可用于限制输出中的拆分数量

关于同一根拐杖的细节

使用的模式

df.str.splitpat=None,n=-1,expand=False 展开:bool,默认为False

将拆分的字符串展开为单独的列

如果为True,则返回数据帧/多索引扩展维度

如果为False,则返回包含字符串列表的序列/索引


这些列是用一个空格隔开的吗?@Alex是的\可能不需要s+。这会生成CParser错误,因为列数不同,并且第一列的空格不多。抱歉,原来的问题用错误的方式表述,经过编辑。这是可行的,但比直接使用str.split慢,因为apply没有矢量化。这是可行的,我使用的是df.str.split“”,3,expand=True,它工作得很好!
   a  b  c                        d
1  1  2  3        test1 test2 test3
2  1  2  3  test1 test2 test3 test4
df = pd.read_csv('./test.csv', sep='#', squeeze=True)
df = df.str.extract('([^\s]+)\s+([^\s]+)\s+(.+)')
df.str.split(' ', n=3, expand=True)