![](/img/trans.png)
[英]How to use Pandas to read CSV file with delimiter existing in the last field?
[英]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.