Python 3.9,Pandas - 如何在现有 excel 中附加数据框
Python 3.9, Pandas - how to append dataframe in existing excel
在 Python 中,我有一个 Pandas 数据框,我需要将其附加到 excel 中的现有数据框(同一文件和 sheet),如下所示:
如果文件不存在,这很容易,但如果它已经存在并且我想追加,我会遇到困难。我怀疑这个过程是'open same file in append mode'->'append df to the end'->'save and close',虽然我还不太明白。我的简化代码:
def process(saveName, labels, data):
if not os.path.isfile(saveName):
df = pd.DataFrame({'Data': labels, 'Value': data})
writer = pd.ExcelWriter(saveName, engine='openpyxl')
df.to_excel(writer, sheet_name='Sheet1')
writer.save()
writer.close()
else:
df = pd.DataFrame({'Value': data})
saveName = 'myFile.xlsx'
labels = ['A', 'B', 'C']
data = [0.1, 0.2, 0.3]
process(saveName, labels, data)
saveName = 'myFile.xlsx'
data = [0.4, 0.5, 0.6]
process(saveName, labels, data)
虽然不是很 Pythonic,但如果它对某人有帮助那就太棒了。
非常感谢@mcsoini 的建议,令人沮丧的是我尝试使用 engine='openpyxl' 模式='a' 并且新数据被附加到新的 sheet。我能解决这个问题的唯一方法是:
i/ 如果文件已经存在,打开它(读取数据框,df)
ii/ 从 df 中删除所有 'Unnamed columns'
iii/ 在 df 的末尾插入新数据
iv/ 覆盖现有文件
非常笨重,但很管用。欢迎提出建议 - 但请提供工作示例代码。
def process(saveName, labels, data):
if not os.path.isfile(saveName):
df = pd.DataFrame({'Data': labels, 'Value': data})
writer = pd.ExcelWriter(saveName)
df.to_excel(writer, sheet_name='Sheet1')
writer.save()
else:
df = pd.read_excel(saveName, sheet_name='Sheet1')
for item in list(df):
if 'Unnamed' in item:
df = df.drop([item], axis=1)
position = len(list(df))
df.insert(position, 'Value', data, True)
with pd.ExcelWriter(saveName) as writer:
df.to_excel(writer, sheet_name='Sheet1', startrow=0, startcol=0)
saveName = 'myFile.xlsx'
labels = ['A', 'B', 'C']
data = [0.4, 0.5, 0.6]
process(saveName, labels, data)
在 Python 中,我有一个 Pandas 数据框,我需要将其附加到 excel 中的现有数据框(同一文件和 sheet),如下所示:
如果文件不存在,这很容易,但如果它已经存在并且我想追加,我会遇到困难。我怀疑这个过程是'open same file in append mode'->'append df to the end'->'save and close',虽然我还不太明白。我的简化代码:
def process(saveName, labels, data):
if not os.path.isfile(saveName):
df = pd.DataFrame({'Data': labels, 'Value': data})
writer = pd.ExcelWriter(saveName, engine='openpyxl')
df.to_excel(writer, sheet_name='Sheet1')
writer.save()
writer.close()
else:
df = pd.DataFrame({'Value': data})
saveName = 'myFile.xlsx'
labels = ['A', 'B', 'C']
data = [0.1, 0.2, 0.3]
process(saveName, labels, data)
saveName = 'myFile.xlsx'
data = [0.4, 0.5, 0.6]
process(saveName, labels, data)
虽然不是很 Pythonic,但如果它对某人有帮助那就太棒了。 非常感谢@mcsoini 的建议,令人沮丧的是我尝试使用 engine='openpyxl' 模式='a' 并且新数据被附加到新的 sheet。我能解决这个问题的唯一方法是: i/ 如果文件已经存在,打开它(读取数据框,df) ii/ 从 df 中删除所有 'Unnamed columns' iii/ 在 df 的末尾插入新数据 iv/ 覆盖现有文件
非常笨重,但很管用。欢迎提出建议 - 但请提供工作示例代码。
def process(saveName, labels, data):
if not os.path.isfile(saveName):
df = pd.DataFrame({'Data': labels, 'Value': data})
writer = pd.ExcelWriter(saveName)
df.to_excel(writer, sheet_name='Sheet1')
writer.save()
else:
df = pd.read_excel(saveName, sheet_name='Sheet1')
for item in list(df):
if 'Unnamed' in item:
df = df.drop([item], axis=1)
position = len(list(df))
df.insert(position, 'Value', data, True)
with pd.ExcelWriter(saveName) as writer:
df.to_excel(writer, sheet_name='Sheet1', startrow=0, startcol=0)
saveName = 'myFile.xlsx'
labels = ['A', 'B', 'C']
data = [0.4, 0.5, 0.6]
process(saveName, labels, data)