【发布时间】:2020-09-18 10:55:04
【问题描述】:
我正在创建一个票证跟踪项目,其中有一个保存票证信息的 pandas 数据框。然后我将此数据框存储到一个 csv 文件中。数据框将在程序开始时初始化。
其中一个列值是一个列表。当您使用以下代码行将 pandas 数据框存储在 csv 文件中时:self.ticketDF.to_csv(self.ticketCSVFilePath),它会用双引号将列表括起来。然后,当您将其读回时,它现在被解释为字符串,而不是列表。在我的示例中,您可以在 cmets 列下看到带有双引号的列表。
这是我的文件 - tickets.csv:
Ticket ID,Subject,Project,Description,Priority,Comments
PROT-18,testSubject,testProject,testDescription,testPriority,"['comment1', 'comment2', 'comment3']"
PROT-19,testSubject,testProject,testDescription,testPriority,"['comment4', 'comment5', 'comment6']"
我正在初始化 pandas 数据框,使用这两个函数:
def initializeTicketDF(self):
if path.exists(self.ticketCSVFilePath) and path.getsize(self.ticketCSVFilePath) > 0:
self.ticketDF = pd.read_csv(self.ticketCSVFilePath) #reading the csv file into the dataframe
self.ticketDF.set_index('Ticket ID', inplace=True) #I am setting the index to the Ticket ID
self.columnToList("Comments") #Calling my function that currently does the
#workaround
def columnToList(self, columnName):
count = 0 #this represents the current row in the dataframe
for x in self.ticketDF['Comments']: #x holds the "Comments" value for every row
x = x.replace('[', '') #replace left and right brackets
x = x.replace(']', '')
x = re.findall('\'([^\']*)\'', x) #get a list of all values between single quotes
self.ticketDF[columnName][count] = x #store the list back into the dataframe
count += 1
如上所示,要解决此问题,我将分别替换每个括号,然后使用以下行获取单引号之间所有值的列表:x = re.findall('\'([^\']*)\'', x) 然后我将列表逐行存储回数据帧中。
我也尝试过使用 csv.DictReader/Writer,它做同样的事情。
有没有一种方法可以读取 csv 中的列表而无需进行任何字符串修改?有没有可以用来清理列表字符串的正则表达式?
任何想法将不胜感激。谢谢!
【问题讨论】:
-
这能回答你的问题吗? Pandas read csv with regex separator
标签: python regex pandas csv dataframe