数据帧转置和映射



我需要执行两个样本 t 检验,为此我必须转置示例文件并将值从另一个 csv 文件映射到示例文件。我是python的新手,到目前为止我已经尝试过:

with open('project.csv') as f_project:
    df = pd.read_csv('project.csv', delimiter = ',', dtype= 'unicode', 
    error_bad_lines=False)
    df.set_index('TaxID', inplace=True)
    df_kraken = df.T
    df_meta = pd.read_csv('Meta3251.csv', delimiter = ',', dtype= 'unicode', 
    error_bad_lines=False, usecols = ['SRA ID', '(0/1)'])
    df_kraken['Meta'] = df_kraken['TaxID'].map(df_meta.set_index('SRA ID')
    ['(0/1)'])

转置后的示例文件数据帧如下所示:

                    333046  1049    337090
PRJEB3251_ERR169499 0.05    0.03    0.01
PRJEB3251_ERR169500 0       0       0
PRJEB3251_ERR169501 0       0       0
PRJEB3251_ERR169502 0.05    0       0
PRJEB3251_ERR169503 0.03    1.9     0
PRJEB3251_ERR169507 0.01    0       0
PRJEB3251_ERR169508 0       0.1     0
PRJEB3251_ERR169509 0       0.05    0

索引未设置为税号。

我有另一个 csv 文件,T 已将其作为另一个数据帧,以便我可以映射值。它看起来像

SRA ID     (0/1)
ERR169611   1
ERR169610   1
ERR169609   1
ERR169608   1
ERR169607   0
ERR169606   0
ERR169605   1
ERR169604   1
ERR169484   0

我需要将零一值映射到第一个数据帧的第一列。我卡在错误:键错误:"税号"任何关于这一点的hepl将不胜感激。

在你建议之后,我有这个:

import pandas as pd
df = pd.read_csv('project.csv').set_index('ID').T
df = df.reset_index().rename(columns={'index': 'Project ID'})
df_meta = pd.read_csv('Meta3251.csv', delimiter = ',', dtype= 'unicode', 
error_bad_lines=False, usecols = ['SRA ID', '(0/1)'])
df['KEY'] = df['Project ID'].str.split('_').str[1]
df['Meta ID'] = df['KEY'].replace(dict(zip(df_meta['SRA ID'], df['(Project 
ID)'])))
df.to_csv('R.csv')

在此之后,我得到以下结果:

        Project ID              333046 1049     KEY     Meta ID
        0   PRJEB3251_ERR169499 0.05  0.03    ERR169499 PRJEB3251_ERR169636                                
        1   PRJEB3251_ERR169500 0       0    ERR169500  PRJEB3251_ERR169635                           
        2   PRJEB3251_ERR169501 0       0    ERR169501  PRJEB3251_ERR169626                           
        3   PRJEB3251_ERR169502 0.05    0    ERR169502  PRJEB3251_ERR169625

我有索引,但好的部分现在是无法重命名我的列,但映射不起作用。

这里有一个可行的解决方案:

df = pd.read_csv('project.csv', delimiter = ',', dtype= 'unicode',     error_bad_lines=False)
df.set_index('TaxID', inplace=True)
df_kraken = df.T.reset_index() # Make sure 'TaxID' is a column
df_meta = pd.read_csv('Meta3251.csv', delimiter = ',', dtype= 'unicode', error_bad_lines=False, usecols = ['SRA ID', '(0/1)'])
# In your example the second dataframe only matches what's after the '_'
# so you can isolate that part
df_kraken['KEY'] = df_kraken['TaxID'].str.split('_').str[1]
df_kraken['Meta'] = df_kraken['KEY'].replace(dict(zip(meta['SRA'], meta['ID'])))

编辑

该问题已被编辑。在 read_csv(( 之后(第一行(:

  TaxID   PRJEB3251_ERR169499 PRJEB3251_ERR169500 PRJEB3251_ERR169501
0 333046  0.05                      0                     0
1 1049    0.03                      0                     0
2 337090  0.01                      0                     0
3 288681  3.6                       0                     0
4 267889  0.02                      0                     0
...

然后

df = df.set_index('TaxID').T
print(df)
TaxID                 333046  1049    337090    
PRJEB3251_ERR169499    0.05    0.03    0.01    
PRJEB3251_ERR169500    0.00    0.00    0.00   
PRJEB3251_ERR169501    0.00    0.00    0.00    

请注意,此时TaxID索引的名称,而不是行索引的名称。如果要将TaxID作为列:

df = df.reset_index().rename(columns={'index': 'TaxID'})

为避免混淆,您可以从列名称中删除TaxID

df.columns.name = None

最新更新