我有将网络数据抓取到 Excel 文件中的经验,并且我知道将数据复制到 Excel 电子表格中时,您可以选择将其复制到哪一列。 (
startcol = 10
如下面的代码片段所示)
with pd.ExcelWriter("jockeyclub.xlsx", engine="openpyxl", mode='a', if_sheet_exists='overlay') as writer:
df.to_excel(writer, sheet_name="data", index=False, startcol=10)
但是,当将网络数据抓取到 csv 文件时,我的所有数据帧都将进入同一列,使其成为一个非常长的列。有没有办法选择我可以将每个数据帧上传到 CSV 文件的哪一列?
以下是我用于将数据上传到 CSV 的代码。
df.to_csv('/Users/nicholaschan/Desktop/data.csv', mode='a', index=False, header=False)
无法直接像使用
.to_excel()
和
startcol
那样在
.to_csv()
中选择起始列。
CSV(逗号分隔值)文件本质上是表格的,但它们只存储值,而不存储单元格、列或格式信息。
发生的情况是,一直在将新的数据帧附加到现有的 CSV 文件中,这会导致所有数据都位于同一列中。
为了实现想要的效果,需要执行以下操作:
- 读取现有 CSV 文件(如果存在): 这将允许将新数据添加到现有数据中,而不是覆盖它。
- 将新数据与现有数据合并: 这将确保的新数据被添加到正确的“列”或 CSV 中的字段位置。
- 将合并后的数据帧写入 CSV: 这将用新数据更新 CSV 文件。
以下是使用
pandas
的示例:
import pandas as pd
# 新数据
new_data = {'column1': [1, 2, 3], 'column2': [4, 5, 6]}
df = pd.DataFrame(new_data)
# 尝试读取现有的 CSV 文件。如果文件不存在,则创建一个空的数据帧。
try:
existing_df = pd.read_csv('/Users/nicholaschan/Desktop/data.csv', header=None)
except FileNotFoundError:
existing_df = pd.DataFrame()
# 将新数据框与现有的数据框合并。
combined_df = pd.concat([existing_df, df], axis=1)
# 将合并后的数据框写入 CSV 文件。
combined_df.to_csv('/Users/nicholaschan/Desktop/data.csv', mode='w', index=False, header=False)
这段代码将:
-
尝试读取
data.csv
。如果文件存在,它将加载现有数据。如果文件不存在,它将创建一个新的空数据帧。 -
使用
axis=1
水平连接(添加列)新数据帧和现有的数据帧。 -
将合并后的数据帧写回
data.csv
,有效地将新数据“追加”为新列。
重复此过程,每次抓取新的数据集时,它都会作为新列添加到的 CSV 文件中。
标签:python,excel,pandas,csv,beautifulsoup From: 78781355