我目前正在尝试使用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文档时,它说可以使用多个定界符,但我不太明白。如果有任何帮助,我将非常感激
请注意
打印 df 来确认它。
现在,当你运行 df.columns = ['Rank', ...]
你试图断言7 通过的名字到现有的 6 数据列。
也许你应该。
这样做的代码是。
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')