【发布时间】:2021-07-16 18:05:56
【问题描述】:
我需要一个单行 CSV,其中的数据由 , 分割。我的问题是,当我尝试使用 apply 迭代我的 Dataframe 时,我得到一个 Series 对象,而 to_csv 方法给了我一个 str 分成几行,将 None 设置为 "" 并且没有任何 @987654327 @。但是,如果我用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=','),但得到了相同的输出。
当我在 DataFrame 和 Series 中使用 to_csv 方法时,为什么会得到不同的输出?
需要进行哪些更改以使apply 与for 给出相同的结果?
【问题讨论】:
-
DataFrame.
apply传递一个系列,无论轴=0 是列系列,还是轴=1 是变成系列的行。据我所知,你无法改变这一点 -
你为什么需要
apply你不能只做df.to_csv(header=False, index=False)吗? -
@ALollz 是的,我知道,但我不知道为什么这两个
to_csv方法会给出不同的结果。 -
@BioGeek 我需要逐行迭代以将行作为 CSV 发送到一对一的 Sagemaker 端点以进行推断。
-
@FrancoMorero 然后遍历 csv 的行:
for line in df.to_csv(header=False, index=False).splitlines(): ...
标签: python python-3.x pandas dataframe csv