我只是在学习使用Jupyter笔记本的熊猫。我有10个数据集,包含不同年份的日常温度。但是,日期分为几个月,几天和几年的不同列,并且在不同的列中显示温度。原始数据在列名称中有空格。例如,df1info()的信息如下:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 17301 entries, 0 to 17300
Data columns (total 4 columns):
agno 17301 non-null int64
mes 17301 non-null int64
dia 17301 non-null int64
valor 17301 non-null float64
dtypes: float64(1), int64(3)
memory usage: 540.7 KB
我确实编写了以下代码,在检查了这个社区中的不同解决方案之后执行这项工作,我想知道一种更有效和更好的方法。
list_df = [df1,df2,df3,df4,df5,df6,df7,df8,df9,df10]
for i, df in enumerate(list_dfs):
df = list_df[i]
df = df.rename(columns=lambda x: x.strip())
df['mes'] = df['mes'].astype(str)
df['dia'] = df['dia'].astype(str)
df['combined']=df['agno'].astype(str) + "-" + df["mes"] + "-" + df["dia"]
df["date"]= pd.to_datetime(df["combined"])
df = df[['date','valor']]
list_df[i] = df
i = i + 1
感谢您的帮助。提前谢谢。
答案 0 :(得分:3)
我认为它可能会被concat
缩小,这将创建多个索引数据框,您可以使用合并数据框进行这些调整,然后只需groupby
key
(此处为level = 0)并将这些单个df拆分为您想要的新列表
s=pd.concat(list_df,keys=list(range(len(list_df))))
s = s.rename(columns=lambda x: x.strip())
s['mes'] = s['mes'].astype(str)
s['dia'] = s['dia'].astype(str)
s['combined']=s['agno'].astype(str) + "-" + s["mes"] + "-" + s["dia"]
s["date"]= pd.to_datetime(s["combined"])
s = s[['date','valor']]
list_df=[d for _,d in s.groupby(level=0)]
答案 1 :(得分:3)
我这样做:
def f(df):
df['date'] = (pd.to_datetime(
df.rename(
columns={'agno':'year', 'mes':'month', 'dia':'day'})
[['year','month','day']]))
return df.drop([['year','month','day']], axis=1)
df = pd.concat([f(x) for x in list_df], ignore_index=True)