我需要一个以逗号分隔的单行CSV文件。我的问题是,当我尝试使用apply迭代我的数据框时,我得到了一个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=',')
,但是我得到了相同的输出。
为什么我在DataFrame
和Series
中使用to_csv
方法时得到不同的输出?
需要进行哪些更改以使apply
产生与for
相同的结果?
apply
方法传递一个Series,无论axis=0是列Series,还是axis=1将行转换为Series。据我所知,您无法更改这一点。 - ALollzapply
,不能直接执行df.to_csv(header=False, index=False)
? - BioGeekto_csv
方法会给出不同的结果。 - Franco Morerofor line in df.to_csv(header=False, index=False).splitlines(): ...
- BioGeek1.2.4
版本,并且在使用result_type='broadcast'
参数时,得到的输出与我在问题中发布的一样。我的代码是:df.apply(lambda x: print_csv(x), axis=1, result_type='broadcast')
,请问我做错了什么? - Franco Morero