Pandas读取csv问题

mzaanser  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(139)

我有一个非常糟糕的数据集,我想把它读入Python做一些数据分析,下面是一个数据集的例子:

Column 0      Column 1
Row 0         (1,2)           [3 4]

显然,这些值将被读取为str值而不是数值。我尝试使用ast.literal_eval,它似乎可以处理像(1,2)这样的数据值,但不太适合[3 4]。我希望我的最终结果是这样的,数据集中的每个单元格都是一个元组。所以最终结果应该是这样的:
数据集[0,0][0]=1
数据集[0,0][1]=2
数据集[0,1][0]=3
数据集[0,1][1]=4
在这种情况下我应该怎么做?非常感谢!

62lalag4

62lalag41#

match_pattern = r'\[.+\]'
extract_pattern = r'\d+'

def num_find(string):
    if re.match(match_pattern, string):
        str_list = re.findall(extract_pattern, string)
        return tuple(map(int, str_list))
    return eval(string)
data = [['Column 0', 'Column 1'],
        ['(1,2)', '[3 4]']]

df = pd.DataFrame(data[1:], columns=data[0])
Column 0    Column 1
0   (1,2)       [3 4]
new_df = df.apply(lambda x:x.apply(num_find))
Column 0    Column 1
0   (1, 2)      (3, 4)

另一种替代方法,但不可靠:

def change(cell):
    cell = cell.replace(' ',',')
    cell = tuple(map(int,eval(cell)))
    return cell

new_df = df.apply(lambda row:row.apply(change))

相关问题