将两个数据帧写入 CSV 中的两个不同列

Write two dataframes to two different columns in CSV

我将两个数组转换为两个数据帧,并想将它们写入两个单独列中的 CSV 文件。数据框中没有公共列。我尝试了如下解决方案,也尝试了堆栈交换,但没有得到结果。解决方案 2 没有错误,但它将所有数据打印到一列中。我猜这是数组如何转换为 df 的问题?我基本上想要将 Frequency 和 PSD 的两个列值导出到 csv。我该怎么做?

解决方案 1:

df_BP_frq = pd.DataFrame(freq_BP[L_BP], columns=['Frequency'])
df_BP_psd = pd.DataFrame(PSDclean_BP[L_BP], columns=['PSD'])

df_BP_frq['tmp'] = 1
df_BP_psd['tmp'] = 1
df_500 = pd.merge(df_BP_frq, df_BP_psd, on=['tmp'], how='outer')
df_500 = df_500.drop('tmp', axis=1)

错误:无法为形状为 (274870566961,) 且数据类型为 int64 的数组分配 2.00 TiB

解决方案 2:

df_BP_frq = pd.DataFrame(freq_BP[L_BP], columns=['Frequency'])
df_BP_psd = pd.DataFrame(PSDclean_BP[L_BP], columns=['PSD'])

df_500 = df_BP_frq.merge(df_BP_psd, left_on='Frequency', right_on='PSD', how='outer')

没有错误。 结果:PSD 值全部为 0,并且在下方几行的频率值下方可见。

解决方案 3:

df_BP_frq = pd.DataFrame(freq_BP[L_BP], columns=['Frequency'])
df_BP_psd = pd.DataFrame(PSDclean_BP[L_BP], columns=['PSD'])

df_500 = pd.merge(df_BP_frq, df_BP_psd, on='tmp').ix[:, ('Frequency','PSD')]

错误:KeyError:'tmp'

导出到 csv 使用:

df_500.to_csv("PSDvalues500.csv", index = False, sep=',', na_rep = 'N/A', encoding = 'utf-8')

您可以直接将数组存储为数据框的列。如果两个数组的长度相同,则可以使用以下方法。

df_500 = pd.DataFrame()
df_500['Frequency'] = freq_BP[L_BP]
df_500['PSD'] = PSDclean_BP[L_BP]

如果数组的长度不同,你可以将它们转换为系列,然后通过以下方式将它们添加为列。这将为数据框中的空值添加 nan

df_500 = pd.DataFrame()
df_500['Frequency'] = pd.Series(freq_BP[L_BP])
df_500['PSD'] = pd.Series(PSDclean_BP[L_BP])

根据你的问题,我了解到你有两个数组,你想将它们存储到一个数据帧的不同列中,并将该数据帧保存到具有单独列的 csv 中。

创建两个等长的 Numpy 数组。

import numpy as np 
n1 = np.arange(2, 100, 0.01)
n2 = np.arange(3, 101, 0.01)

创建一个空数据框并将上述数组存储为数据框的列

n = pd.DataFrame()
n['feq']= n1
n['psd'] = n2

存储到 Csv

n.to_csv(r"C\:...\dataframe.csv",index= False)

如果它们是不相等的数据帧,将它们转换为系列,然后将它们存储在空数据帧中。