我从stdin
那里得到了数据,
x
x
x y
x
x y z
...
并且我想基于该输入创建pandas DataFrame
df = pd.read_csv(sys.stdin, sep='\t', header=None)
,但是这里的问题是我第三行的数据具有比第一行更多的值,而且我得到了
pandas.errors.ParserError:标记数据时出错。 C错误:第3行中应有1个字段,看到了2
问题是:当我不知道最长的元素链(由\t
分隔)时,如何处理此错误。
答案 0 :(得分:1)
整个任务可以用单指令执行, 不计算每一行中的元素。
我准备了一个这样的示例,使用 io.StringIO :
df = pd.DataFrame([ ln.rstrip().split('\t') for ln in
io.StringIO(txt).readlines() ]).fillna('')
列表理解将每个源行转换为一个列表 片段(在 Tab 之间)
。然后,此列表理解项是 pd.DataFrame 的 data 参数 并请注意,这样的行列表可以包含不同长度的行。
我还添加了 fillna('')将每个 NaN 转换为空字符串 (您可以随意删除它)。
要运行测试,我将源变量定义为:
txt = '''x
x
x y
x
x y z
x
x y z v'''
结束执行上面的代码,得到:
0 1 2 3
0 x
1 x
2 x y
3 x
4 x y z
5 x
6 x y z v
在目标版本中,将字符串中的读数替换为 stdin 。