gpt4 book ai didi

python pandas dataframe to_sql 将对象转换为 Mysql INT 数据类型会产生不正确的结果

转载 作者:行者123 更新时间:2023-11-30 22:09:50 26 4
gpt4 key购买 nike

我正在尝试将 csv 文件读入 Pandas 数据帧,并使用 pandas.to_sql 函数将最终数据帧插入 Mysql。

除了数据框中的一列长度为 25 个字符外,所有列都插入了正确的数据。此列(transaction_id)在 MYSQL 中定义为 INT(25),我一直无法弄清楚为什么此列有错误数据。

奇怪的是,对于每个 csv 文件超过 360K 行,MySQL 中的 transaction_id 列具有相同的值。

任何帮助都会很棒。

客户交易 ID 示例:

format: transaction id_page id-banner id
2343213254646775357496618_12-586542237
2343213254646775357881218_14-586542237
2343213254646775357886268_10-586542237
2343213254646775357886218_27-586542237
2343213254646775357886248_10-586542237

这是我的代码:

xls = pd.ExcelFile(path_value)
df = xls.parse('report', skiprows=13, index_col=None, na_values=['NA'])

# remove last row
df = df[:-1]
df['transaction_datetime'] = pd.to_datetime(df['transaction_datetime'])

# add transaction date column to data frame:
df['transaction_date'] = df['transaction_datetime'].dt.date
df.loc[:, 'created_date'] = datetime.datetime.now()

# convert client transaction id into three parts
df['transaction_id'], df['placeholder'] = zip(
*df['Client Transaction ID'].apply(lambda x: x.split('_', 1)))
df['page_id'], df['banner_id'] = zip(*df['placeholder'].apply(lambda x: x.split('-', 1)))


df.drop('placeholder', axis=1, inplace=True)
df.drop('Client Transaction ID', axis=1, inplace=True)

print datetime.datetime.now()
# connect to mysql
engine = create_engine(
'connection string'
echo=False)
df.to_sql(name='table', con=engine, if_exists='append', index=False)
print datetime.datetime.now()

最佳答案

如果我正确理解了您的代码,您可以使用矢量化 .str.extract() 解析 transaction_idpage_idbanner_id方法并“一次性”完成:

In [32]: df
Out[32]:
Client Transaction ID
0 tx0001_page01-banner01
1 tx0002_page01-banner23
2 tx0003_page33-banner56
3 tx0004_page12-banner76
4 tx0005_page44-banner11

In [33]: df[['transaction_id','page_id','banner_id']] = \
...: df.pop('Client Transaction ID').str.extract(r'^([^_]*)_([^-]*)-(.*)',
...: expand=True)
...:

In [34]: df
Out[34]:
transaction_id page_id banner_id
0 tx0001 page01 banner01
1 tx0002 page01 banner23
2 tx0003 page33 banner56
3 tx0004 page12 banner76
4 tx0005 page44 banner11

PS 你没有提供任何样本数据所以我不得不用你的代码重建它...

关于python pandas dataframe to_sql 将对象转换为 Mysql INT 数据类型会产生不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40454713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com