pd.merge一个df全为NAN的情况

本文探讨了在处理DataFrame时遇到的key列dtype为object的问题,并提供了将df1和df2的dtype统一转换为int类型的解决方案,确保数据结构的一致性。

这是由于key列dtype为object的缘故,必须要统一成一个数据结构
df1.astype(int)
df2.astype(int)

为我分析下面这个代码 import os.path from operator import index from turtledemo.penrose import start import pandas as pd # 读取 Excel 文件 align_by='report_time' file_path='./masked_data' #/output0731.csv' save_file='./split_new' file_list=os.listdir(file_path) with open('./{}/droped_file.txt'.format(file_path),'w') as f: for file in file_list: if 'output' not in file or file.endswith('xlsx'): continue save_path='data_{}'.format(file.split('output')[-1].split('.')[0].strip()) #print(os.path.join(file_path,file)) df = pd.read_csv(os.path.join(file_path,file), encoding="utf-8-sig",index_col=False) # pd.read_csv("data.csv", encoding="utf-8-sig") start=df[align_by].iloc[0] #[:-4] end=df[align_by].dropna().iloc[-1] #[:-4] print(start,end) if not os.path.exists('./{}/{}'.format(save_file,save_path)): os.makedirs('./{}/{}'.format(save_file,save_path)) # 按 'addr' 列进行分组 grouped = df.groupby('addr') ts = pd.date_range(start=start, end=end, freq='20s') table_columns=['addr',align_by,'ua','ub','uc','ia','ib','ic','pi','pa','pb','pc','qi','qa', 'qb','qc','ft','fa','fb','fc','qp_power1','qp_power0','qr_power1','qr_power0', 'power1','power2','power3','power4'] df[align_by] = pd.to_datetime(df[align_by]) # 将每个分组保存为一个 Excel 文件 for addr, group_df in grouped: # 清理文件名中的非法字符 group_df= group_df.drop_duplicates(subset=align_by) #print(len(group_df)) new_group_df=pd.DataFrame(columns=table_columns) new_group_df[align_by] = ts group_df = pd.merge_asof(ts.to_frame(name=align_by), group_df, on=align_by, direction="nearest", tolerance=pd.Timedelta("5s")) df_merged = pd.merge(new_group_df, group_df, on=align_by, how='left',suffixes=('_x','')) df_merged=df_merged[[col for col in df_merged.columns if not col.endswith('_x')]] df_merged=df_merged.interpolate(method='linear',limit_direction='both') if (df_merged['ua'].all() ==0) and (df_merged['ub'].all()==0) and (df_merged['uc'].all()==0): print('{} is droped'.format(addr)) f.write(file + "_" + addr) f.write('\n') continue safe_addr = str(addr).strip() # .replace('/', '_').replace('\\', '_') # if safe_addr[0]=='0': # safe_addr=safe_addr[1:] print(len(df_merged),addr) df_merged.to_csv(f"./{save_file}/{save_path}/{safe_addr}.csv", index=False)
最新发布
09-24
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值