我具有以下格式的原始数据:
JobID,Publish,Expire,TitleAndDetail
7428,17/12/2006 2:00:00 PM,28/01/2007 2:00:00 PM,Project Engineer - Mechanical Looking,.....,....
7429,9/03/2006 2:00:00 PM,27/02/2007 2:00:00 PM,Supply Teacher The job is,.....,.....
如您所见,定界符是逗号,但是最后一列是其中包含逗号的文本块。 我正在使用熊猫的read_csv
函数来读取此CSV文件。但是,在熊猫数据框中,每行第四个逗号之后的文本部分会丢失。
raw_data = pd.read_csv(r"/ABC/JobDetails.csv",
names=['JobID', 'Publish', 'Expire', 'TitleAndDetail'],
header=None
)
如果使用string.split()
函数,我可以指定一个maxsplit
参数,即使有很多逗号,我也可以将所有内容保留在最后一列中。熊猫有类似的功能吗?
答案 0 :(得分:0)
因此,您可以尝试以下技巧:
raw_data = pd.read_csv(r"/ABC/JobDetails.csv",
squeeze=True,
sep="\a"
)
这应该让您忽略“,” s
那么您可以做:
df = raw_data.str.split(",", n=4, expand=True)
df.columns = ['JobID', 'Publish', 'Expire', 'TitleAndDetail']
那应该分成4列并重命名
答案 1 :(得分:0)
您可以通过以下方式进行:
with open("file.csv", "r") as fp:
reader = csv.reader(fp, delimiter=",")
rows = [x[:3] + [','.join(x[3:])] for x in reader]
df = pd.DataFrame(rows)
df.columns = df.iloc[0]
df = df.reindex(df.index.drop(0))
print df
答案 2 :(得分:0)
手动读取文件,然后创建数据框:
rows = []
with open('somefile.csv') as f:
keys = next(f).split(',')
for line in f:
rows.append(dict(zip(keys, line.split(',', 3))))
df = pd.DataFrame(rows)
.split
使用一个可选参数来限制它在定界符上分割的次数。传递3表示它会忽略最后一个字段中的逗号:
>>> s.split(',', 3)
['7428',
'17/12/2006 2:00:00 PM',
'28/01/2007 2:00:00 PM',
'Project Engineer - Mechanical Looking,.....,....']
接下来,我们使用标题行中的键和数据行中的值创建一个字典:
>>> f = 'JobID,Publish,Expire,TitleAndDetail'.split(',')
>>> dict(zip(f, s.split(',', 3)))
{'JobID': '7428',
'Publish': '17/12/2006 2:00:00 PM',
'Expire': '28/01/2007 2:00:00 PM',
'TitleAndDetail': 'Project Engineer - Mechanical Looking,.....,....'}
最后,我们列出这些词典的列表(在rows
中,并将其作为自变量传递以创建数据框对象。