我有很多Excel plains
,我使用pandas
加载它们,处理数据并作为我的“数据库”output it writes all data in a Excel plain
。
数据库必须遵循日期索引中的模式,例如2017-01-01 (yyyy-mm-dd)
,2017-01-02,2017-01-03 ...... 2017-12-31 ......等等。
但是作为我输入的平原并没有遵循日期规则。我的处理处理它并与输入普通和输出数据库索引正确匹配,创建一个新文件:pd.to_excel('database\databaseFinal.xlsx')
。我的问题是adding new values to the existing database and still process the indexes to respect the pattern.
例如:
DATABASE.xlsx:
date Name1 Name2
2017-01-01 23.2 18.4
2017-01-02 21.5 27.7
2017-01-03 0 0
2017-01-04 0 0
用于更新数据库的普通输入:
date Name1
2017-01-04 32.5
处理数据...... 合并数据后:
date Name1_x Name2 Name1_y
2017-01-01 23.2 18.4 0
2017-01-02 21.5 27.7 0
2017-01-03 0 0 0
2017-01-04 0 0 32.5
我想要的是什么:
date Name1 Name2
2017-01-01 23.2 18.4
2017-01-02 21.5 27.7
2017-01-03 0 0
2017-01-04 32.5 0
在这个问题中我必须有output an excel file
。我知道这一定是一种简单而有效的处理方式,但我不想让我的工作徒劳无功
答案 0 :(得分:1)
您可以简单地追加并使用零填充NAN值,而不是使用合并。
df1
date Name1 Name2
0 2017-01-01 23.2 18.4
1 2017-01-02 21.5 27.7
2 2017-01-03 0.0 0.0
3 2017-01-04 0.0 0.0
df2
date Name1
0 2017-01-04 32.5
df1.append(df2).fillna(0)
Name1 Name2 date
0 23.2 18.4 2017-01-01
1 21.5 27.7 2017-01-02
2 0.0 0.0 2017-01-03
3 0.0 0.0 2017-01-04
0 32.5 0.0 2017-01-04
如果您始终希望保留第二个数据帧的值,则可以使用drop_duplicate并将日期作为子集:
df1.append(df2).fillna(0).drop_duplicates(subset=['date'], keep='last')
Name1 Name2 date
0 23.2 18.4 2017-01-01
1 21.5 27.7 2017-01-02
2 0.0 0.0 2017-01-03
0 32.5 0.0 2017-01-04
答案 1 :(得分:1)
# Make the dataframe
df = pd.DataFrame([['2017-01-01', 23.2, 18.4],
['2017-01-02', 21.5, 27.7],
['2017-01-03', 0.0, 0.0],
['2017-01-04', 0.0, 0.0]])
df.columns = ["date","Name1","Name2"]
df.index = df["date"]
df = df.drop("date",axis=1)
# Change the value
df.loc["2017-01-04"]["Name1"] = 32.5