csv数据写入mysql数据库 AttributeError: ‘DataFrame‘ object has no attribute ‘ftypes‘ TypeError: argument of

csv数据写入mysql数据库 AttributeError: ‘DataFrame’ object has no attribute ‘ftypes’ TypeError: argument of type ‘numpy.dtype’ is not iterable

关于csv数据写入mysql数据库,网搜一箩筐代码,但大部分都会报这个2个错。

代码

types = f.ftypes
field = [] #用来接收字段名称的列表
table = [] #用来接收字段名称和字段类型的列表
for item in columns:
    if 'int' in types[item]:
        char = item + ' INT'
    elif 'float' in types[item]:
        char = item +' FLOAT'
    elif 'object' in types[item]:
        char = item +' VARCHAR(255)'
    elif 'datetime' in types[item]:
        char = item + ' DATETIME'
    else:
        char = item + ' VARCHAR(255)'
    table.append(char)
    field.append(item)

报错信息1

Traceback (most recent call last):
  File "/Users/1/PycharmProjects/SQL_for_csv/csv_to_sql.py", line 90, in <module>
    M.read_csv(cases_path)
  File "/Users/1/PycharmProjects/SQL_for_csv/csv_to_sql.py", line 22, in read_csv
    self.csv2mysql(db_name=self.dbname, table_name=table_name, df=df)
  File "/Users/1/PycharmProjects/SQL_for_csv/csv_to_sql.py", line 48, in csv2mysql
    field1, field2 = self.make_table_sql(df)
  File "/Users/1/PycharmProjects/SQL_for_csv/csv_to_sql.py", line 29, in make_table_sql
    types = df.ftypes
  File "/Users/1/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py", line 5274, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'ftypes'

报错信息2

‘’’
Traceback (most recent call last):
File “/Users/1/PycharmProjects/SQL_for_csv/csv_to_sql.py”, line 90, in
M.read_csv(cases_path)
File “/Users/1/PycharmProjects/SQL_for_csv/csv_to_sql.py”, line 22, in read_csv
self.csv2mysql(db_name=self.dbname, table_name=table_name, df=df)
File “/Users/1/PycharmProjects/SQL_for_csv/csv_to_sql.py”, line 48, in csv2mysql
field1, field2 = self.make_table_sql(df)
File “/Users/1/PycharmProjects/SQL_for_csv/csv_to_sql.py”, line 32, in make_table_sql
if ‘int’ in types[col]:
TypeError: argument of type ‘numpy.dtype’ is not iterable

‘’’

解决方法

columns = df.columns.tolist()
field = []  # 用来接收字段名称的列表
table = []  # 用来接收字段名称和字段类型的列表
types = df.dtypes
print(types)
for col in columns:
    if 'int' in str(df[col].dtype):
        char = col + ' INT'
    elif 'float' in str(df[col].dtype):
        char = col + ' FLOAT'
    elif 'object' in str(df[col].dtype):
        char = col + ' VARCHAR(255)'
    elif 'datetime' in str(df[col].dtype):
        char = col + ' DATETIME'
    else:
        char = col + ' VARCHAR(255)'
    table.append(char)
    field.append(col)

以上对代码进行了优化

1. f.ftypes改为df.dtypes

2. if ‘int’ in types[item]: 改为if ‘int’ in str(df[col].dtype):

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值