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):