python - Pandas 读取缺少一个标头的 csv
问题描述
我正在尝试使用 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
您可以使用nrows
和参数:skiprows
names
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
推荐阅读
- cloud-foundry - c++ statx() 系统调用在 Cloud Foundry 中不起作用
- excel - 根据月份将列中的值复制/粘贴到另一列中
- arduino - 在蜂鸣器上演奏和弦,ESP32 Arduino
- git - 在 master 分支上,git 说我比 master 领先 10 次提交,我的同事 10 次提交,其中一个包含错误
- django - 为每个嵌套的序列化器获取单独的序列化器响应
- javascript - 如何在 reactjs 中使用 onChange 更新输入值?
- oracle - Springboot多个Oracle驱动版本
- sql - 从 where 子句中的列中获取最高值
- python - 过滤到分页django
- java - 如何保留yaml中的所有前导缩进?