python - Pandas 读取缺少一个 header 的 csv

标签 python pandas csv dataframe

我正在尝试使用 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

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

def convert_ftp_data():
    file = os.getcwd() + "/data.csv"
    data = pd.read_csv(file, index_col=False)

data["first_name"] = data["CustomerName"].str.split().str[0].str.title()
data["email"] = data["EmailAddress"]

clean_data = data.drop(data[["CustomerName", "ClientID", "EmailDate", "EmailAddress"]], 1)

print(clean_data)

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

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 字段。最好的方法是什么?

最佳答案

单独读取标题

pd.read_csv ,您可以使用 nrowsskiprowsnames 参数:

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

关于python - Pandas 读取缺少一个 header 的 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54092614/

相关文章:

python - 执行 os.getcwd() 时出错?

python - Pandas to_datetime ValueError : Unknown string format

python - 日期时间索引 Pandas

python - Pandas 如何使用 .loc 根据其他列中的值将列设置为 NaN

c# - 删除或不写入行中的最后一个 ';' 符号

python - 类型 'KeyPoint'的对象不是JSON可序列化的opencv

python - 如何在 python 调试器中加载模块

python - 如何定义引用其自身模型的 django 外键 limit_choices_to 约束?

python - 在Python中合并两个csv文件

python - Pandas 数据帧,ValueError : shape mismatch: objects cannot be broadcast to a single shape