正确的索引编制以在Pandas中创建新的数据框

雪莉

基本上,我试图将可怕的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')

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

洛兹

您可以简化一堆。我们将使用一个技巧来创建脂质的另一列,向前填充该值,然后删除原来的行,这不再是必需的。然后,我们将通过简单的数据透视表进入您的数据集。在我的样本数据中,我有一个带有混乱名称的脂质,包括逗号。

在这里,我每隔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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用数据框中的值编制索引

熊猫数据框索引编制不正确

在Pandas数据框中创建子索引

无法在熊猫数据框中按时间戳编制索引

通过从先前的索引列进行计算,在pandas数据框中创建新列

如何通过索引其他列的所需部分在pandas数据框中创建新列

如何根据此 Pandas 数据框中的列条件创建新的索引行?

在多索引数据框中创建新列并填充

在 Pandas 数据框中创建重复值索引

如何在pandas数据框中创建列层次索引

在pandas数据框中创建重复索引条目的列表

在多索引Pandas数据框中的表达式中使用其他变量创建新变量

如何使用 Pandas 中的指定列创建新数据框?

基于 if/elif/and 函数在 Pandas 数据框中创建新列

从Pandas数据框中的其他列创建新列

str。包含在pandas数据框中创建新列

嵌套if条件以在pandas数据框中创建新列

如何使用 Pandas.assign 从 Pandas 数据框索引创建一个新列?

Python,Pandas从数据框创建新数据

Pandas:根据现有数据框中列的名称和数据创建新的数据框

使用Pandas将新数据框索引到新列中

在Pandas Python中理解数据框以创建新的数据框

Python Pandas过滤并创建新的数据框

如何为MultiIndex数据框重新编制索引

如何根据索引将某个值分配到 Pandas 数据框中的新列中

熊猫:在多索引数据框中创建新的(子级别)列并分配值

如何在整个索引中应用value_counts并创建新的数据框?

使用逻辑索引和分组依据在熊猫数据框中创建新列

如何使用参考日期在日期时间格式的多索引数据框中创建新列