Pandas读取csv,其中缺少一个标头

2024-09-30 12:21:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Pandas读取csv文件,但是第一列包含一个用逗号分隔的名字和姓氏。这导致Pandas认为有5列而不是4列,因此最后一列现在没有标题,因此无法选择它。在

文件如下所示:

CustomerName,ClientID,EmailDate,EmailAddress
FNAME1,LNAME1,100,2019-01-13 00:00:00.000,FNAME1@HOTMAIL.COM
FNAME2,LNAME2,100,2019-01-13 00:00:00.000,FNAME2@GMAIL.COM
FNAME3,LNAME3,100,2019-01-13 00:00:00.000,FNAME3@AOL.COM
FNAME4,LNAME4,100,2019-01-13 00:00:00.000,FNAME40@GMAIL.COM
FNAME5,LNAME5,100,2019-01-13 00:00:00.000,FNAME5@AOL.COM

我的代码现在是什么样子:

^{pr2}$

使用我的代码,我得到以下输出:

first_name  email
0   FNAME1  2019-01-13 00:00:00.000
1   FNAME1  2019-01-13 00:00:00.000
2   FNAME1  2019-01-13 00:00:00.000
3   FNAME1  2019-01-13 00:00:00.000
4   FNAME1  2019-01-13 00:00:00.000

我只需要选择FNAME和EmailAddress字段。最好的办法是什么?在


Tags: 文件csv代码compandas名字gmail逗号
3条回答

为什么不直接跳过标题并在导入后正确设置它呢

data = pd.read_csv(file, index_col=False, header=None, skiprows=1)

data.columns = 'CustomerFirstName,CustomerName,ClientID,EmailDate,EmailAddress'.split(',')

尝试以下操作:

pd.read_csv(file, usecols=['EmailAddress']).reset_index().rename(columns={'index': 'first_name', 'EmailAddress': 'email'})

输出:

^{pr2}$

分别阅读标题

使用^{},可以使用nrowsskiprows和{}参数:

from io import StringIO

x = """CustomerName,ClientID,EmailDate,EmailAddress
FNAME1,LNAME1,100,2019-01-13 00:00:00.000,FNAME1@HOTMAIL.COM
FNAME2,LNAME2,100,2019-01-13 00:00:00.000,FNAME2@GMAIL.COM
FNAME3,LNAME3,100,2019-01-13 00:00:00.000,FNAME3@AOL.COM
FNAME4,LNAME4,100,2019-01-13 00:00:00.000,FNAME40@GMAIL.COM
FNAME5,LNAME5,100,2019-01-13 00:00:00.000,FNAME5@AOL.COM"""

headers = pd.read_csv(StringIO(x), nrows=0).columns
headers = np.hstack((['FirstName', 'LastName'], headers[1:]))

df = pd.read_csv(StringIO(x), header=None, skiprows=[0], names=headers)

print(df)

#   FirstName LastName  ClientID                EmailDate        EmailAddress
# 0    FNAME1   LNAME1       100  2019-01-13 00:00:00.000  FNAME1@HOTMAIL.COM
# 1    FNAME2   LNAME2       100  2019-01-13 00:00:00.000    FNAME2@GMAIL.COM
# 2    FNAME3   LNAME3       100  2019-01-13 00:00:00.000      FNAME3@AOL.COM
# 3    FNAME4   LNAME4       100  2019-01-13 00:00:00.000   FNAME40@GMAIL.COM
# 4    FNAME5   LNAME5       100  2019-01-13 00:00:00.000      FNAME5@AOL.COM

相关问题 更多 >

    热门问题