mariadb 将行从一个 Dataframe 复制到panda中的另一个 Dataframe

e0bqpujr  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(167)

我是新的python,Pandas和mariadb,我需要你的帮助和建议,请。我有一个csv文件,其中包含的数据与操作执行的每一天的一个月。我需要提取所有的值 然后将它们插入到数据库中。我曾想过将所有数据存储在一个DataFrame中,然后再迭代并将那天的数据存储在另一个DataFrame中,但我收到了以下警告:

The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.

下面是我目前的代码:

import datetime as dt
import pandas as pd

data = pd.read_csv('./files/salesreport.csv',
                   names=['col_1', 'col_2', 'col_3', 'col_4', 'col_5', 'col_6',
                          'col_7', 'col_8', 'col_9', 'col_10'],
                   sep=',',
                   header=None,
                   keep_default_na=False,
                   na_values="")

df = pd.DataFrame(data)
pd.set_option('display.max_columns', None)

now = dt.datetime.now()

# today_date = now.strftime("%m-%d-%Y")

today_date = '07-17-2022' //i'm using this date for testing
tmp_df = pd.DataFrame()

for (index, row) in df.iterrows():
    if row.col_1 == today_date:
        tmp_df = tmp_df.append(row, ignore_index=True)

我认为如果文件太大,我的方法也会引起性能问题。您能帮我找到最好的解决方案,以便在数据库中只插入特定日期的记录吗?另外,您能告诉我使用MariaDB在数据库中插入记录的最好方法是什么吗?
谢谢你!

fquxozlt

fquxozlt1#

这听起来像一个简单的过滤器对我来说:

tmp_df = df[df.col_1 == today_date]

(and如果这很重要,您可以在后面加上.reset_index()
事实上,重复追加是一个缓慢的,对Pandas来说是一个糟糕的模型。

ycl3bljg

ycl3bljg2#

可以这样做

import pandas as pd
from sqlalchemy import create_engine

engine=create_engine('mysql+pymysql://root:root@localhost/test')

df= pd.read_csv('../files/salesreport.csv', names=['col_1', 'col_2', 'col_3', 'col_4', 'col_5', 'col_6',
                          'col_7', 'col_8', 'col_9', 'col_10'], sep=',', header=None)

# filter by date

df = df[df['col_1'].str.contains('07-17-2022')]

# write data to mysql

df.to_sql('salesreport', engine, schema='test', if_exists='replace', index=True, index_label='id')

或转换为日期时间


# convert to datetime

df['col_1']=pd.to_datetime(df['col_1'], format='%m-%d-%Y')

# filter by date

df=df[df['col_1']=='2022-07-17']

相关问题