python - 如何处理 CSV 文件中 DECIMAL 列的缺失值
问题描述
我正在使用 .csv 文件中的 pyodbc 将数据读取到数据库。
在 SQL Server中定义了一列decimal(18,4)
,但该列中缺少值。所以当我尝试插入它时,它会抛出一个错误,说字符串类型不能转换为数字类型。
数据看起来像
[A, B, C, , 10, 10.0, D, 10.00]
正如您在第 4 位看到的那样,有一个缺失值 '' 应该是一个浮点数,例如 4.3526
我想将此行读取到定义第 4 列的数据库中decimal(18,4)
,它应该看起来像
A B C NULL 10 10.0 D 10.00
在数据库中。
编辑:
这是我的代码
def load_data(c, infile, num_rows = None, db_schema = 'dbo',table_name = 'new_table'):
try:
if num_rows:
dat = pd.read_csv(infile, nrows = num_rows)
else:
dat = pd.read_csv(infile)
l = dat.shape[1]
c.executemany('INSERT INTO {}.{} VALUES {}'.format(db_schema,table_name,'(' + ', '.join(['?']*l) + ')'), dat.values.tolist())
except :
with open(infile) as f:
dat = csv.reader(f)
i = 0
for row in dat:
if i == 0:
l = len(row)
else:
c.execute('INSERT INTO {}.{} VALUES {}'.format(db_schema,table_name,'(' + ', '.join(['?']*l) + ')'), *row)
if num_rows:
if i == num_rows:
break
i += 1
print(db_schema + '.' + table_name+' inserted successfully!')
请忽略缩进错误。
谢谢你。
解决方案
如果 pandas 的read_csv方法为缺失值返回一个空字符串,那么您的 CSV 文件很有可能使用“标点样式”逗号分隔符(逗号后有一个空格)而不是“严格”逗号分隔符(没有额外空格) .
考虑“严格”的 CSV 文件
1,,price unknown
2,29.95,standard price
熊猫代码
df = pd.read_csv(r"C:\Users\Gord\Desktop\no_spaces.csv", header=None, prefix='column')
print(df)
生产
column0 column1 column2
0 1 NaN price unknown
1 2 29.95 standard price
缺失值被解释为NaN
(非数字)。
但是,如果 CSV 文件包含
1, , price unknown
2, 29.95, standard price
然后产生相同的代码
column0 column1 column2
0 1 price unknown
1 2 29.95 standard price
请注意,缺失值实际上是一个包含单个空格 ( ' '
) 的字符串。您可以使用print(df.to_dict())
.
如果要read_csv
正确解析该 CSV 文件,则需要使用sep=', '
字段分隔符包含空格
df = pd.read_csv(r"C:\Users\Gord\Desktop\with_spaces.csv", header=None, prefix='column', sep=', ', engine='python')
print(df)
这又给了我们
column0 column1 column2
0 1 NaN price unknown
1 2 29.95 standard price
推荐阅读
- javascript - 如何让 for 循环在移动到下一次迭代之前等待一个元素
- php - 在构造中调用其他类是不好的做法吗
- r - 如何在 lm() 中制定时间段虚拟变量
- node.js - 显示其他人的用户资料
- sql - Hive 从另一个表创建表并将格式存储为镶木地板
- android - 仅限 Google Play 发布前报告,java.io.FileNotFoundException: 此文件无法作为文件描述符打开;它可能被压缩了
- android - 检查 NestedScrollView 是否可滚动
- java - maven-surefire-plugin:2.18.1:测试失败
- python-3.x - 如何使用 visibility_graph 生成网络?
- arrays - 使用 AWK 匹配 2 个文件之间的多个字段并显示特定字段