gpt4 book ai didi

python - Pandas:如何从 excel 文件中读取 DataFrame,其中多行有时由换行符 (\n) 分隔

转载 作者:太空狗 更新时间:2023-10-30 01:10:53 25 4
gpt4 key购买 nike

我正在尝试读取 pandas 中的一些 excel 文件。在某些文件中,感兴趣的表格的格式并不完美,即多行被格式化为单行,但每个这样的行都有多行。因此,当您查看 excel 文件时,数据显示正常。同样,在使用 pandas 解析它时,每行末尾确实有一个换行符 (\n)。

问题是,当我使用 read_excel() 函数读取它时,它会将其转换为一个 DataFrame,该 DataFrame 不将此换行符视为单独的行,而是将其放入包含\n 的一行中。我想编写一个代码,将 N 行的每一行视为/转换为 N 行(使用换行符作为新行的指示符)。

有没有办法在解析文件或在 Python 中对数据帧进行后处理时做到这一点?

这里我提供了一个非常简化的虚拟 excel 文件和一些代码来解释问题。

示例 Excel 文件:

Name                | Price
-------------------------------
Coca Cola | 46.66
-------------------------------
Google | 1204.44
Facebook | 177.58
-------------------------------
Berkshire Hathaway | 306513.75

我只是在 Python 中使用 Pandas 的 read_excel:

dataframe_parsed = pandas.read_excel(file_name)
print(dataframe_parsed.head())

我得到以下 DataFrame 作为输出:

                 Name            Price
0 Coca Cola 46.66
1 Google\nFacebook 1204.44\n177.58
2 Berkshire Hathaway 306513.75

期望的输出是:

                 Name           Price
0 Coca Cola 46.66
1 Google 1204.44
2 Facebook 177.58
3 Berkshire Hathaway 306513.75

任何帮助将不胜感激。

最佳答案

split 后,您可以使用 unnesting 检查

yourdf=unnesting(df.apply(lambda x : x.str.split(r'\\n')),['Name','Price'])
yourdf
Out[50]:
Name Price
0 Coca Cola 46.66
1 Google 1204.44
1 Facebook 177.58
2 Berkshire Hathaway 306513.75

def unnesting(df, explode):
idx = df.index.repeat(df[explode[0]].str.len())
df1 = pd.concat([
pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
df1.index = idx

return df1.join(df.drop(explode, 1), how='left')

既然你上面说的不行

df.apply(lambda x : x.str.split(r'\\n')).stack().apply(pd.Series).stack().unstack(level=1).reset_index(drop=True)
Out[57]:
Name Price
0 Coca Cola 46.66
1 Google 1204.44
2 Facebook 177.58
3 Berkshire Hathaway 306513.75

关于python - Pandas:如何从 excel 文件中读取 DataFrame,其中多行有时由换行符 (\n) 分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55616994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com