正确的索引以在Pandas中创建新的数据帧

2024-06-25 22:48:23 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我试图将一个糟糕的csv文件重新整理成可用的信息,我想我是在试图欺骗切片过程,这会导致大量的索引和复制警告,最终导致错误的结果

我有如下数据:

lipid1 #some of the names of lipids have commas in them which is an added challenge
tissue1,1
tissue2,6
tissue3,3
tissue4,2
tissue5,5


lipid2
tissue1,24
tissue2,15
tissue3,12
tissue4,14
tissue5,10

我想让它变成这样

        tissue1  tissue2  tissue3  tissue4  tissue5
lipid1  1        6        3        2        5
lipid2  24       15       12       14       10

我很确定这是一个我忽略的简单解决方案,因为到目前为止我一直在使用类似于:

alldata = pd.DataFrame()
for file in glob.glob("All5tissuesPos.csv"):
    filename = file[:-4]
    tissue = file[:-7]

    dirty = pd.read_csv(filename+'.csv', sep='\n', header=None, names=['Arb'])
    #data = dirty['Arb'].str.split(',',expand=True)

    lipid = dirty.iloc[::6]['Arb'].copy()
    #lipid = dirty.iloc[lambda x:x.index%6 == 0]['Arb'].copy()

    data = dirty['Arb'].str.split(',',expand=True)

    t=data[data.index %6 != 0]

    tissue1 = t[t[0]== 'Tissue 1']
    tissue1 ['lipid'] = lipid
    alldata.append(tissue1)
    tissue1.to_csv('test.csv')

最后一步的tissue1看起来确实像我想要的,但是因为它实际上只是另一个数据帧的一部分,而不是一个单独的数据帧(我想无论如何),所以我得到了警告,当我添加它时,什么也没有发生。这种代码应该是什么样子的?是否有一种更快的方法同时对所有5种组织进行此操作


Tags: ofcsv数据警告datafilearbdirty
1条回答
网友
1楼 · 发布于 2024-06-25 22:48:23

你可以把它简化成一堆。我们将使用创建另一列的技巧,向前填充值,然后删除不再需要的原始行。然后,我们通过一个简单的枢轴来访问您的数据集。在我的示例数据中,我有一个名称混乱的类脂,包括逗号

在这里,我每6行使用一次,就像您的条件一样,但是如果数据比较混乱,并且缺少一些行,那么您可以同样轻松地使用类似.str.contains('lipid')的条件

dirty = pd.read_csv('test.csv', sep='\n', header=None, names=['Arb'])

# Broadcast lipid name, drop that "header" row
dirty['lipid_name'] = dirty['Arb'].where(dirty.index%6 == 0).ffill()
dirty = dirty[dirty.index%6 != 0]

# Now we can split data properly
dirty = dirty.set_index('lipid_name')['Arb'].str.split(',', expand=True)

dirty.pivot(columns=0, values=1).rename_axis(None, axis=1)

                           tissue1 tissue2 tissue3 tissue4 tissue5
lipid_name                                                             
lipid11231,12312313,123123       1       6       3       2       5
lipid2                          24      15      12      14      10

样本数据:test.csv

lipid11231,12312313,123123
tissue1,1
tissue2,6
tissue3,3
tissue4,2
tissue5,5
lipid2
tissue1,24
tissue2,15
tissue3,12
tissue4,14
tissue5,10

相关问题 更多 >