gpt4 book ai didi

python - pandas DataFrame数据中的for循环仅将最后一次迭代保存到excel文件

转载 作者:行者123 更新时间:2023-12-01 02:15:02 25 4
gpt4 key购买 nike

我正在循环访问下面的 DataFrame 数据行并检查是否例如Power > 0 列中的值,然后我想将这些数据导出到 Excel 文件中。这也有效,但它只在 Excel 文件中写入最后一次迭代,我得出的结论是,我需要以某种方式使用追加函数,但我不知道如何使其工作。

1.  Location    UnitName    Timestamp           Power        Windspeed   Yaw
2. Bull Creek F10 01/11/2014 00:00:00 7,563641548 3,957911002 280,5478821
3. Bull Creek F10 01/11/2014 00:20:00 60,73444748 4,24157236 280,4075012
4. Bull Creek F10 01/11/2014 00:30:00 63,15441132 4,241089859 280,3903809
5. Bull Creek F10 01/11/2014 00:40:00 59,09280396 4,38904965 280,4152527
6. Bull Creek F10 01/11/2014 00:50:00 69,26197052 4,374599175 280,3750916
7. Bull Creek F10 01/11/2014 01:00:00 101,0624237 5,343887005 280,5173035
8. Bull Creek F10 01/11/2014 01:10:00 122,7936935 5,183885235 280,4681702
9. Bull Creek F10 01/11/2014 01:20:00 86,57110596 5,046733923 280,3834534
10. Bull Creek F10 01/11/2014 01:40:00 16,74042702 3,024427626 280,1408386
11. Bull Creek F10 01/11/2014 01:50:00 12,5870142 2,931351769 280,1185913
12. Bull Creek F10 01/11/2014 02:00:00 -1,029753685 3,116549245 279,9686279
13. Bull Creek F10 01/11/2014 02:10:00 13,35998058 3,448055706 279,8687134
14. Bull Creek F10 01/11/2014 02:20:00 17,42461395 2,943588415 280,1383057
15. Bull Creek F10 01/11/2014 02:30:00 -9,614940643 2,744164819 280,6514893
16. Bull Creek F10 01/11/2014 02:50:00 -11,01966286 3,554833538 283,1451416
17. Bull Creek F10 01/11/2014 03:00:00 -4,383010387 4,279259377 283,3281555


import pandas as pd
import os

os.chdir('C:\Users\NIK\.spyder2\PythonScripts')

fileREF = 'FilterDataREF.xlsx'

dataREF = pd.read_excel(fileREF, sheetname='Sheet1')

filePCU = 'FilterDataPCU.xlsx'

dataPCU = pd.read_excel(filePCU, sheetname='Ark1')

for i in range(len(dataREF)):
for j in range(len(dataPCU)):
if dataREF['Timestamp'][i] == dataPCU['Timestamp'][j] and dataREF['Power'][i] > 0 and dataPCU['Power'][j] > 0:

data_REF = pd.DataFrame([dataREF.loc[i]])
data_PCU = pd.DataFrame([dataPCU.loc[j]])

writer = pd.ExcelWriter('common_data.xlsx', engine='xlsxwriter')
# Convert the dataframe to an XlsxWriter Excel object.
data_REF.to_excel(writer, sheet_name='Sheet1')
data_PCU.to_excel(writer, sheet_name='Sheet1', startcol=7)

writer.save()

最佳答案

有很多方法可以做到这一点。我可以建议...而不是循环遍历 DataFrames 的每一行,尝试 joiningmerging他们?

merged_data = data_REF.merge(data_PCU, on=['Timestamp'], l_suffix='', r_suffix='PCU')

上面的内容将在Timestamp字段上内部连接data_REFdata_PCU。我这样做是因为我看到您的代码中有 dataREF['Timestamp'][i] == dataPCU['Timestamp'][j] 。请注意,l_suffix='' 表示 data_REF 中与 data_PCU 中类似命名的任何列都将保留。同时,类似地以 data_PCU 命名的列将在后缀中添加 _PCU。以 Timestamp_PCU 为例

一旦你有了合并的 DataFrame,你就可以开始做类似的事情

pow_gt_zero = (merged_data['Power'] > 0) & (merged_data['Power_PCU'] > 0)
valid_df = merged_data.loc[pow_gt_zero]

使用.loc上面,您将获得满足条件 pow_gt_zero 的 DataFrame 子集。

现在您已经有了满足条件的行,您可以再次引用这些时间戳。您可以使用它们对原始 DataFrame 进行子集化,以便将它们写入 Excel。

data_REF = data_REF.loc[data_REF['Timestamp'].isin(valid_df['Timestamp'])
data_PCU = data_PCU.loc[data_PCU['Timestamp'].isin(valid_df['Timestamp'])

关于python - pandas DataFrame数据中的for循环仅将最后一次迭代保存到excel文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48424891/

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