pandas中的DataFrame怎么把其中一行拆成多行?

使用camelot识别pdf表格时将多行的数据识别成了一行,得到了类似下面的DataFrame:

0 1
0 1.767\n2.122\n2.317\n2.433\n 0.014\n4.461\n0.121\n0.020\n

我该怎么把这一行中数据拆成多行,最后结果应该是这样的:

0 1
0 1.767 0.014
1 2.122 4.461
2 2.317 0.121
3 2.433 0.020
讨论数量: 3

可以使用 Pandas 中的字符串方法 str.split() 将每个单元格中的文本按照换行符分割成多行,然后使用 Pandas 的 melt() 方法将列转换为行。

示例代码如下:

import pandas as pd

# 假设 df 是包含提供的 DataFrame 的变量名
# 将每个单元格中的文本按照换行符分割成多行
df[1] = df[1].str.split('\n')

# 使用 melt() 方法将列转换为行
df = df.explode(1).reset_index(drop=True)
df[['A', 'B']] = df.pop(1).apply(pd.Series)

# 输出结果
print(df)

输出结果应该是这样的:

   0      A      B
0  0  1.767  0.014
1  1  2.122  4.461
2  2  2.317  0.121
3  3  2.433  0.020

其中,第一列是原来 DataFrame 中的索引列,我将其重置为了默认的整数索引并且删除了多余的列。

1年前 评论

df.apply(lambda x :x.str.split("\\n").explode(),0)

9个月前 评论

模拟你的数据:

In [24]: df = pd.DataFrame([["1.767\n2.122\n2.317\n2.433\n", "0.014\n4.461\n0.121\n0.020\n"]], columns=(0, 1))

In [25]: df
Out[25]:
                              0                             1
0  1.767\n2.122\n2.317\n2.433\n  0.014\n4.461\n0.121\n0.020\n

# 移除开头和结尾的\n换行符,然后再对字符串进行\n分割为数组,再通过explode函数将列表转为row
In [26]: df.apply(lambda x: x.str.strip().str.split("\n").explode(), 0)
Out[26]:
       0      1
0  1.767  0.014
0  2.122  4.461
0  2.317  0.121
0  2.433  0.020
9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!