python - 使用列之间的换行符读取 csv 文件
问题描述
我已经使用pandas
, 用分号分隔的列读取和解析 csv 文件;
。一些文件(出于未知原因)'\r\n'
在一些列之后有一个序列,这使得pandas.read_csv
它们分成不同的行。我想转义这些字符并将“第二行”附加到“第一行”,否则之后解析会变得困难。
我可以识别这些行,因为它们后面跟着数字,而正确的第一列包含时间,例如00:00:00
. 有可能做到这一点pandas.read_csv
吗?
例子
使用正确的文件,我的代码将如下所示:
data = io.StringIO( ''' a; b; c; d
x10; 20; 30; 40
x11; 21; 31; 41
x12; 22; 32; 42
x13; 23; 33; 43
x14; 24; 34; 44
x15; 25; 35; 45
''' )
pd.read_csv( data, sep=';' )
输出:
a b c d
0 10 20 30 40
1 11 21 31 41
2 12 22 32 42
3 13 23 33 43
4 14 24 34 44
5 15 25 35 45
问题
使用损坏的文件,它看起来像这样:
data = io.StringIO( ''' a; b; c; d
x10; 20; 30; 40
x11; 21; 31; 41
x12; 22;
32; 42
x13; 23; 33; 43
x14; 24; 34; 44
x15; 25; 35; 45
''' )
pd.read_csv( data, sep=';' )
输出:
a b c d
0 x10 20 30 40.0
1 x11 21 31 41.0
2 x12 22 NaN
3 32 42 NaN NaN
4 x13 23 33 43.0
5 x14 24 34 44.0
6 x15 25 35 45.0
然而,在这两种情况下,预期输出都是第一个。在这个例子中,我会考虑替换\r\n\d\d
为\d\d
在pandas中构建数据框之前/期间摆脱那些换行符。
如果可能的话,我想避免先修复文件,避免在使用 pandas 阅读之前制作额外的脚本来检查所有文件,因为会定期出现新文件。
在 Pandas 中读取 csv 文件时是否可以替换部分字符串?
有没有另一种方法来解决这类问题?
使用 python 3.6.8 ,熊猫 0.24.2
解决方案
这是大型 csv 经常发生的事情。我用来解决它的方法是使用 python 读取它们并检查分隔符的数量是否符合您的预期,否则删除该行。然后,一旦原始数据得到纠正,您就可以使用StringIO
. 您的错误示例的示例:
# We load the file
filestream = open(filepath)
# Now we filter the data as follows
data = filter(lambda l: l.count(";")==3, filestream)
# Now we convert to String IO
stream = io.StringIO("\n".join(data))
# And finally we read with Pandas
pd.read_csv(stream, sep=';' )
推荐阅读
- javascript - 增加 CSS 样式百分比
- reactjs - 具有相同样式的样式映射 Material-UI 图标 (React)
- python - 连续“内核似乎已经死了。它将自动重新启动”
- php - 如何在 TWIG 中显示变量
- excel - Excel VBA 根据三列中的值查找同一行中的两个值
- python - Player1 控制键工作,player2 键在 pygame 中不起作用,有什么解决办法吗?
- c++ - 如何删除 std::to_string() 分配的内容?
- python - SymPy:使用vector_integrate进行通量积分,法向量的方向是什么?
- haskell - 函数的 Haskell 模式匹配 (+) (-) (/) (*)
- angular - 如何将FormData从角度发送到nestjs