【问题标题】:How to fix pandas to_sql append not appending one item out of 2000?如何修复熊猫 to_sql 追加不追加 2000 年的一项?
【发布时间】:2019-07-23 16:58:48
【问题描述】:

我有一个包含 2000 行和 3 列的 Int、String 和 String 类型的 CSV 文件。我正在尝试编写一个程序来创建一个表并将我的 CSV 文件 rowsxcolumns 附加到表中。这一切似乎都有效,除了一个项目。该项目的第一列和第三列已附加,但第二列为空。

控制台上没有显示错误,我在调用 to_sql 函数之前尝试将数据打印到控制台,它显示了一个丢失的项目就好了。我的 CSV 文件也使用分隔符。该项目最初的格式不正确,因此在分隔我的所有行之后,我必须自己专门分隔该单行 - 我认为这可能导致问题?所有其他行和列都很好。

这是我的代码:

import sqlite3
import pandas as pd
from pandas import DataFrame

connection = sqlite3.connect('data.sqlite')
c = connection.cursor()

c.execute('''CREATE TABLE test(val1 int, val2 varchar(255), val3 varchar(255))''')

connection.commit()

col_names = ["val1", "val2", "val3"]
read_clients = pd.read_csv(r'thefile.csv', encoding='utf-16', names=col_names, sep='\t')

read_clients.to_sql('test', connection, if_exists='append', index = false, schema='test')

connection.commit()

没有消息打印到控制台。

【问题讨论】:

  • read_clients DataFrame 在 read_clients.to_sql() 之前是否看起来应有的样子?
  • @braintho 是的,我打印了数据框,它正确地显示了指定列下的数据。即使我只打印一个我遇到问题的项目,它看起来也很好。它就在 to_sql() 函数调用之后。除了那一项之外,一切都很好......
  • 那么你对 csv 或 DataFrame 没有问题。该问题必须与表定义有关。 DataFrame 中的数据类型是否与 sqlite 表中的数据类型相关?您是否有任何长度超过 255 个字符的字符串?那就是我开始寻找的地方。
  • @braintho 哇,这完全有道理,因为该项目的 val3 超过 255 个字符,我什至没有想到这一点。但是,val2 只有 2 个字符,而 val3 是 532 个字符。 val3 是否可能使 val2 无效?
  • 我明白了。有道理。

标签: python sql python-3.x pandas csv


【解决方案1】:

所以丢失的字符串的值为“NA”。 Python 显然将其转换为空值!这是我修复它的方法:

read_clients = pd.read_csv(r'thefile.csv', encoding='utf-16', names=col_names, sep='\t', na_filter=False)

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2021-01-07
    • 2020-04-21
    • 2021-10-26
    • 2016-09-13
    相关资源
    最近更新 更多