为什么Pandas的空白分隔符会跳过我的一个值?

问题描述 投票:0回答:1

我目前正在尝试使用Python读取一个新的值。文本文件 到Sqlite3中使用Pandas。下面是文本文件中的一些条目。

1  Michael  462085  2.2506  Jessica  302962  1.5436
2  Christopher  361250  1.7595  Ashley  301702  1.5372
3  Matthew  351477  1.7119  Emily  237133  1.2082

T他的数据由流行的婴儿名字组成,我必须将男名和女名分开到各自的表中,并对它们进行查询。 我的方法是先将所有数据放入两个表中,然后再删除不需要的列。我的问题是,当我试图将名字添加到列中时,我得到一个值错误。预期的轴有6个元素,但有7个值。我认为这是因为Pandas可能没有读取每行的最后一个值,但我不知道如何解决这个问题。我目前的定界符是一个空白定界符,你可以看到下面。

这是我的代码。

import sqlite3
import pandas as pd
import csv

con = sqlite3.connect("C:\\****\\****\\****\\****\\****\baby_names.db")
c=con.cursor()


# Please note that most of these functions will be commented out, because they will only be run once.

def create_and_insert():
    # load data
    df = pd.read_csv('babynames.txt', index_col=0, header=None, sep= '\s+', engine = 'python')
    # Reading the textfile

    df.columns = ['Rank', 'BoyName', 'Boynumber', 'Boypercent', 'Girlname', 'Girlnumber', 'Girlpercent']
    # Adding Column names

    df.columns = df.columns.str.strip()


    con = sqlite3.connect("*************\\baby_names.db")

    # drop data into database
    df.to_sql("Combined", con)

    df.to_sql("Boys", con)

    df.to_sql("Girls", con)

    con.commit()
    con.close()
create_and_insert()

def test():
    c.execute("SELECT * FROM Boys WHERE Rank = 1")
    print(c.fetchall())






test()



con.commit()
con.close()

我试过添加多个定界符 但似乎没有任何效果 只使用常规的空格作为定界符似乎只会创建 "空白 "的列名。在阅读Pandas文档时,它说可以使用多个定界符,但我不太明白。如果有任何帮助,我将非常感激

python pandas sqlite whitespace
1个回答
1
投票

请注意

  • 你的输入文件包含 7 列。
  • 但初始列设置为 指数 (你通过了 index_col=0),
  • 所以你的DataFrame只包含 6 常规列。

打印 df 来确认它。

现在,当你运行 df.columns = ['Rank', ...]你试图断言7 通过的名字到现有的 6 数据列。

也许你应该。

  • 读取DataFrame而不设置索引(目前)。
  • 指定所有7个列名。
  • 设置 排名 列作为索引。

这样做的代码是。

df = pd.read_csv('babynames.txt', header=None, sep='\s+', engine='python')
df.columns = ['Rank', 'BoyName', 'Boynumber', 'Boypercent', 'Girlname', 'Girlnumber',
    'Girlpercent']
df.set_index('Rank', inplace=True)

或者更短的代码(一气呵成):

df = pd.read_csv('babynames.txt', sep='\s+', engine='python',
    names=['Rank', 'BoyName', 'Boynumber', 'Boypercent', 'Girlname', 'Girlnumber',
    'Girlpercent'], index_col='Rank')
© www.soinside.com 2019 - 2024. All rights reserved.