大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说Pandas 列拆分|天数转日期[通俗易懂],希望您对编程的造诣更进一步.
客户要求如下:
1.按要求处理p360-met文件,从第5行开始读取:
Met=pd.read_csv("P360-met.csv",skiprows=5)# 将 DateTime 列拆分为 date 和 time 列Met = Met.assign(date=Met['DateTime'].str.split("T").str[0], time=Met['DateTime'].str.split("T").str[1])#筛选每日12点Met[Met["time"]=="12:00:00Z"]
2.按要求处理p360 2017 snr文件,文件名格式:p3603650.17.snr66
#遍历所有文件
file_lst=os.listdir("./p360/")
file_lst
#分割文件名,变为日期和天数
df_snr.loc[row,"date"]=get_date("20"+file_date[1],file_date[0][4:7],)
#读取文件,按\t分割
Snr=pd.read_csv("./p360/"+file,sep="\t",header=None,)
# 将 a 列拆分为 多列 三列Snr = Snr.join(Snr[0].str.split(expand=True).rename(columns={0:'a', 1:'b', 2:'c',3:"d",4:"e",5:"f",6:"g",7:"h",8:"i"}))#转换G列为float类型Snr["g"]=Snr["g"].astype("float")#使用已知第几天算出是该年日期date = pd.Timestamp(year=int(year), month=1, day=1) + pd.Timedelta(days=int(day_of_year)-1)
df_snr=pd.DataFrame({"date":[]})row=0for file in file_lst: #print(file) file_date=file.split(".") #分割文件名,变为日期和天数 df_snr.loc[row,"date"]=get_date("20"+file_date[1],file_date[0][4:7],) #读取文件,按\t分割 Snr=pd.read_csv("./p360/"+file,sep="\t",header=None,) # 将 a 列拆分为 多列 三列 Snr = Snr.join(Snr[0].str.split(expand=True).rename(columns={0:'a', 1:'b', 2:'c',3:"d",4:"e",5:"f",6:"g",7:"h",8:"i"})) #转换G列为float类型 Snr["g"]=Snr["g"].astype("float") #计算均值,大小值写入DF df_snr.loc[row,"max"]=Snr["g"].max() df_snr.loc[row,"min"]=Snr["g"].min() df_snr.loc[row,"mean"]=Snr["g"].mean() row+=1
3.合并表格,先将V1表与Met表合并,使用pd.merge,DateTime列 left合并
#读取V1表
V1=pd.read_csv("p360_v1.csv",skiprows=5,)
V1.reset_index(inplace=True)
V1["DateTime"]=V1["index"]
# #合并V1和Met表
V1_join=pd.merge(V1,Met[['DateTime', ' Air Pressure', ' Air Temperature', ' Relative Humidity',
' Wind Direction', ' Wind Speed', ' Rain', ' Hail', ' Samples/hour',]],
on=["DateTime"],how="left"
)
V1_join
# 将日期列转换为字符串格式
df_snr['DateTime'] = pd.to_datetime(df_snr['date']).dt.strftime('%Y-%m-%dT12:00:00Z')
df_snr
最后将3个表合并,使用pd.merge,DateTime列 left合并
result=pd.merge(V1_join,df_snr[["DateTime","max","min","mean"]],on="DateTime",how="left")
result
最后一列加上日期是本年的第几天
def get_tian(tian):
# 创建一个日期
date = pd.to_datetime(tian)
# 提取日期所在的年份
year = date.year
# 创建一个新日期,表示当年的第一天
first_day_of_year = pd.to_datetime(f'{year}-01-01')
# 计算日期和当年的第一天之间的天数,并加上1
day_of_year = (date - first_day_of_year).days + 1
return day_of_year # 输出结果为
#拆分日期
result1=result.assign(date=result['DateTime'].str.split("T").str[0], time=result['DateTime'].str.split("T").str[1])
for i in range(len(result1)):
result1.loc[i,"tian"]=get_tian(result1.loc[i,"date"])
result1
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11828.html