繁体   English   中英

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

[英]pandas read csv use delimiter for a fixed amount of time

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

$date $machine $task_name $loggedstuff

我希望使用pd.read_csv('blah.log', sep=r'\\s+')阅读整个内容。 问题是, $loggedstuff有空格,是否有任何方法可以将分隔符限制为正好运行3次,以便loggedstuff所有内容都将在数据loggedstuff显示为单列?

我已经尝试过使用csv将其解析为列表列表,然后将其输入到熊猫中,但这很慢,我想知道是否还有更直接的方法可以做到这一点。 谢谢!

设定

tmp.txt

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

df = pd.read_csv('tmp.txt', sep='\n', header=None)
cols = df.loc[0].str.split(' ')[0]
df = df.drop(0)

def splitter(s):
    vals = s.iloc[0].split(' ')
    d = dict(zip(cols[:-1], vals))
    d[cols[-1]] = ' '.join(vals[len(cols) - 1: ])
    return pd.Series(d)

df.apply(splitter, axis=1)

回报

   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 ,split元素将扩展为单独的列。

参数n可用于限制输出中的分割数。

关于同一只手杖的详细信息来自pandas.Series.str.split

使用模式

df.str.split(pat = None,n = -1,expand = False)expand:bool,默认为False

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

如果为True,则返回DataFrame / MultiIndex扩展维。

如果为False,则返回包含字符串列表的Series / Index

df.str.split(' ', n=3, expand=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM