gpt4 book ai didi

python - 为什么 pandas Dataframe.to_csv 的输出与 Series.to_csv 不同?

转载 作者:行者123 更新时间:2023-12-04 17:19:15 27 4
gpt4 key购买 nike

我需要一个由 , 分割数据的单行 CSV。我的问题是,当我尝试使用 apply 遍历我的 Dataframe 时,我得到一个 Series 对象并且 to_csv 方法给我一个 str 分成行,将 None 设置为 "" 并且没有任何 ,。但是,如果我用 for 遍历数据框,我的方法会得到一个 Dataframe 对象,它会在一行中给我一个 str ,,没有将 None 设置为 ""

下面是测试这个的代码:

import pandas


def print_csv(tabular_data):
print(type(tabular_data))
csv_data = tabular_data.to_csv(header=False, index=False)
print(csv_data)


df = pandas.DataFrame([
{"a": None, "b": 0.32, "c": 0.43},
{"a": None, "b": 0.23, "c": 0.12},
])

df.apply(lambda x: print_csv(x), axis=1)

for i in range(0, df.shape[0]):
print_csv(df[i:i+1])

使用 apply 的控制台输出:

<class 'pandas.core.series.Series'>
""
0.32
0.43
<class 'pandas.core.series.Series'>
""
0.23
0.12

使用 for 的控制台输出:

<class 'pandas.core.frame.DataFrame'>
,0.32,0.43
<class 'pandas.core.frame.DataFrame'>
,0.23,0.12

我尝试在我的函数中使用 csv_data = tabular_data.to_csv(header=False, index=False, sep=',') 但我得到了相同的输出。

当我在 DataFrameSeries 中使用 to_csv 方法时,为什么会得到不同的输出?

需要进行哪些更改才能使 apply 给出与 for 相同的结果?

最佳答案

嗯,我研究了很多,我的输出是不同的,因为这是预期的行为。我在 Pandas 存储库中找到了一个 PR,其中一些贡献者添加了一个带有 Series.to_csv 的片段,并且具有与我相同的输出 ( This the comment from toobaz)。

因为 Series 是 DataFrame 单列的数据结构,我的 print_csv 函数得到的实际上是一个包含我的数据的单列数据结构(这是 的输出当使用 df.apply(lambda x: print_csv(x), axis=1) 调用时,在 print_csv 中打印(tabular_data.head())对象):

<class 'pandas.core.series.Series'>
a None
b 0.23
c 0.12
Name: 1, dtype: object

因此,CSV 可以像那样,因为它每列生成一行:

""
0.23
0.12

要获得我想要的输出,我需要做的是将单列数据结构更改为单行数据结构。为此,我使用 pandas.Series.to_frame 将 Series 对象转换为 DataFrame。并转置它(我使用 DataFrame 的属性 T,它是 pandas.DataFrame.transpose 的访问器)。

我将应用函数更改为:

df.apply(lambda x: print_csv(x.to_frame().T), axis=1)

print_csv 的新输出在 apply 中使用问题中的 DataFrame(带有示例数据)调用是我所期望的:

<class 'pandas.core.frame.DataFrame'>
,0.32,0.43
<class 'pandas.core.frame.DataFrame'>
,0.23,0.12

关于python - 为什么 pandas Dataframe.to_csv 的输出与 Series.to_csv 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67214578/

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