2017-10-17 54 views
1

因此,我先从一个空白的DataFrame开始,从SQL语句中根据表名列表拉出一堆新的数据帧,然后将每一个附加到起始数据帧。 例如:“数据类型不明白”当附加数据帧

df1 = pd.DataFrame() 
for name in tableslist: 
    perT = pd.read_sql_query("SELECT FROM myschema.{0} WHERE username = '{1}'.format(name,user),engine) 
    df1 = df1.append(perT) 

即返回错误:在终端data type not understood。我肯定它是由附加行引起的(我已经检查过打印语句)。什么可能导致? perT可能是没有行的表。这是一个问题吗?我已经尝试打印出每张表的头部,但仍然无法确定是什么导致了该错误/失败。

+0

你确定你的查询给你你期待什么?尝试单独运行它们。 –

+0

尝试单独运行'mysql'查询,收集查询输出的文本/ csv文件,然后添加到'df'。这可能有助于查明问题。 –

回答

1

我发现使用老版本的熊猫时,这可能发生在数据框中存在日期字段的情况下(特别是datetime64变体)。在过去,我已经使用了许多解决方法(请参阅下文),但很难确切知道什么可以帮助您,而无需查看数据。

  1. 将所有日期字段转换为熊猫时间戳(df[col_name].apply(pd.Timestamp))。
  2. 将所有日期字段转换为字符串(df[col_name].astype(str))。
  3. 您的初始数据框是一个空的数据框。不要尝试将非空数据框附加到空数据框,而是将初始数据框设置为等于第一个非空数据框,然后继续追加。

    if df1.empty: 
        df1 = perT 
    else: 
        df1 = df1.append(perT) 
    
  4. 升级大熊猫:)

+0

我做了第3步和第4步。我相信这个错误来自于尝试附加空数据框(无论是满的还是全空的)。多谢 – Acoustic77