小编use*_*373的帖子

将具有值列表的字典转换为数据框

说我有三本字典

dictionary_col2
{'MOB': [1, 2], 'ASP': [1, 2], 'YIP': [1, 2]}
Run Code Online (Sandbox Code Playgroud)
 dictionary_col3

{'MOB': ['MOB_L001_R1_001.gz',
         'MOB_L002_R1_001.gz'],
 'ASP': ['ASP_L001_R1_001.gz',
         'ASP_L002_R1_001.gz'],
 'YIP': ['YIP_L001_R1_001.gz',
         'YIP_L002_R1_001.gz']}

Run Code Online (Sandbox Code Playgroud)
dictionary_col4

{'MOB': ['MOB_L001_R2_001.gz',
         'MOB_L002_R2_001.gz'],
 'ASP': ['ASP_L001_R2_001.gz',
         'ASP_L002_R2_001.gz'],
 'YIP': ['YIP_L001_R2_001.gz',
         'YIP_L002_R2_001.gz']}

Run Code Online (Sandbox Code Playgroud)

我想将上述字典转换为数据框。我尝试了以下方法

df = pd.DataFrame([dictionary_col2, dictionary_col3, dictionary_col4])df数据帧的样子,

                ASP MOB YIP
0   [1, 2]  [1, 2]  [1, 2]
1   [ASP_L001_R1_001.gz, ASP_L002_R1_001.gz]    [MOB_L001_R1_001.gz, MOB_L002_R1_001.gz]    [YIP_L001_R1_001.gz, YIP_L002_R1_001.gz]
2   [ASP_L001_R2_001.gz, ASP_L002_R2_001.gz]    [MOB_L001_R2_001.gz, MOB_L002_R2_001.gz]    [YIP_L001_R2_001.gz, YIP_L002_R2_001.gz]
Run Code Online (Sandbox Code Playgroud)

我的目标是建立一个包含以下各列的数据框:

    col1  col2 col3              col4 
    MOB   1   MOB_L001_R1_001.gz MOB_L001_R2_001.gz      
    MOB   2   MOB_L002_R1_001.gz MOB_L002_R2_001.gz 
    ASP   1   ASP_L001_R1_001.gz …
Run Code Online (Sandbox Code Playgroud)

python dictionary pandas

14
推荐指数
1
解决办法
279
查看次数

使用scipy对数据框内的组进行ANOVA

我有一个数据帧如下.我需要在三种情况之间对此进行ANOVA.数据框如下所示:

data0 = pd.DataFrame({'Names': ['CTA15', 'CTA15', 'AC007', 'AC007', 'AC007','AC007'], 
    'value': [22, 22, 2, 2, 2,5], 
    'condition':['NON', 'NON', 'YES', 'YES', 'RE','RE']})
Run Code Online (Sandbox Code Playgroud)

我需要在YES和NON,NON和RE以及YES和RE之间进行ANOVA测试,条件来自Names的条件.我知道我可以这样做,

NON=df.query('condition =="NON"and Names=="CTA15"')
no=df.value
YES=df.query('condition =="YES"and Names=="CTA15"')    
Y=YES.value
Run Code Online (Sandbox Code Playgroud)

然后执行单向ANOVA如下,

    from scipy import stats                
    f_val, p_val = stats.f_oneway(no, Y)            
    print ("One-way ANOVA P =", p_val )
Run Code Online (Sandbox Code Playgroud)

但是如果有任何优雅的解决方案会很好,因为我的初始数据框很大并且有许多名称和条件可供比较

python scipy pandas

9
推荐指数
1
解决办法
3264
查看次数

读取文本文件并计算概率和香农熵

我有一个文本文件(制表符分隔),我需要计算文本文件中每列的概率和熵.这是我的文本文件的样子:

aaa 0.0520852296    0.1648703511    0.1648703511
bbb 0.1062639955    0.1632039268    0.1632039268
ccc 1.4112745088    4.3654577641    4.3654577641
ddd 0.4992644913    0.1648703511    0.1648703511
eeee    0.169058175 0.1632039268    0.1632039268
Run Code Online (Sandbox Code Playgroud)

所以我可以使用以下代码计算概率:

import pandas as pd
f=open(mydata,'r')
df = pd.DataFrame(pd.read_csv(f, sep='\t', header=None, names=['val1', 'val2', 'val3']))
print(df)
df.loc[:,"val1":"val3"] = df.loc[:,"val1":"val3"].div(df.sum(axis=0), axis=1)
print(df)
Run Code Online (Sandbox Code Playgroud)

哪个输出,

aaa 0.0232736716    0.0328321936    0.0328321936
bbb 0.0474828153    0.0325003428    0.0325003428
ccc 0.6306113983    0.8693349271    0.8693349271
ddd 0.2230904597    0.0328321936    0.0328321936
eeee    0.0755416551    0.0325003428    0.0325003428
Run Code Online (Sandbox Code Playgroud)

在那个输出上我想计算熵并给我结果作为输出文件,所以我有以下代码

import math
entropy = - sum([ p * math.log(p) / math.log(2.0) for p in df ])
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误消息: …

python math numpy pandas

6
推荐指数
1
解决办法
3488
查看次数

使用seaborn为数据帧绘制直方图

我有一个dataFrame,它有多列和多行.很多行没有列的值,所以在数据框中它表示为NaN.示例dataFrame如下,

df.head()
GEN Sample_1    Sample_2    Sample_3    Sample_4    Sample_5    Sample_6    Sample_7    Sample_8    Sample_9    Sample_10   Sample_11   Sample_12   Sample_13   Sample_14
A123    9.4697  3.19689 4.8946  8.54594 13.2568 4.93848 3.16809 NAN NAN NAN NAN NAN NAN NAN
A124    6.02592 4.0663  3.9218  2.66058 4.38232         NAN NAN NAN NAN NAN NAN NAN
A125    7.88999 2.51576 4.97483 5.8901  21.1346 5.06414 15.3094 2.68169 8.12449 NAN NAN NAN NAN NAN
A126    5.99825 10.2186 15.2986 7.53729 4.34196 8.75048 16.9358 5.52708 NAN NAN NAN NAN NAN NAN
A127    28.5014 4.86702 NAN NAN …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas seaborn

5
推荐指数
2
解决办法
2万
查看次数

在不同的列名称上合并两个不同的数据框

我有两个数据框

df1 = pd.DataFrame({'A': ['A1', 'A1', 'A2', 'A3'],
                     'B': ['121', '345', '123', '146'],
                     'C': ['K0', 'K1', 'K0', 'K1']})

df2 = pd.DataFrame({'A': ['A1', 'A3'],
                      'BB': ['B0', 'B3'],
                      'CC': ['121', '345'],
                      'DD': ['D0', 'D1']})
Run Code Online (Sandbox Code Playgroud)

现在我需要从df1的A列和B列以及从df2的A列和CC列获得相似的行。因此,我尝试了可能的合并选项,例如:

both_DFS=pd.merge(df1,df2, how='left',left_on=['A','B'],right_on=['A','CC'])
Run Code Online (Sandbox Code Playgroud)

这不会给我来自df2数据帧的行信息,这是我所需要的。意思是,我拥有df2中的所有列名,但行只是空或Nan。

然后我尝试:

Both_DFs=pd.merge(df1,df2, how='left',left_on=['A','B'],right_on=['A','CC'])[['A','B','CC']]
Run Code Online (Sandbox Code Playgroud)

这给了我错误,

KeyError: "['B'] not in index"
Run Code Online (Sandbox Code Playgroud)

我的目标是将df1和df2中的所有列都合并到Dataframe中。任何建议都很好

所需的输出:

 Both_DFs
    A   B   C   BB  CC  DD
0   A1  121 K0  B0  121 D0
Run Code Online (Sandbox Code Playgroud)

因此,在我的数据帧(df1和df2)中,只有一行与目标两列都完全匹配。也就是说,df1中的A和B列只有一行与df2中A和CC列中的行完全匹配

python merge numpy pandas

4
推荐指数
1
解决办法
8231
查看次数

如何从列表中为数据框的特定列名附加后缀

我想根据 df2 中的名称为 df1 的某些列名附加一个后缀或前缀。我的 df1 看起来像这样,

AE02    AE03    AE04    AE05    AE06    AE07    AE08    AE09    AE10    AE11    AE12
11.9619362364   18.5701402709   42.2010838789   28.0025053738   19.5589170223   18.1459582989   16.5292369479   32.4885640738   34.0342144643   31.6971000153   44.932255488
2.9904840591    3.9793157723    0   0   1.7780833657    1.7281865047    13.7743641233   4.3318085432    0   17.067669239    0
0   0   0   0   2.6671250485    0   4.5914547078    0   0   0   2.1396312137
Run Code Online (Sandbox Code Playgroud)

和 df2 看起来像,

 V1
AE06
AE08    
AE09
AE12
Run Code Online (Sandbox Code Playgroud)

我可以用新名称替换这些列名,如下所示,

colnames(df1)[which(colnames(df1) %in% df2$V1 )] <- "DMR"
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种解决方案,我可以将其作为前缀附加到列名而不是替换它,例如,我的列名应该是这样的,

AE02    AE03    AE04    AE05    DMR_AE06    AE07    DMR_AE08    DMR_AE09    AE10    AE11    DMR_AE12
Run Code Online (Sandbox Code Playgroud)

任何建议和帮助都非常感谢

python multiple-columns pandas suffix

2
推荐指数
1
解决办法
3265
查看次数

如何使用bash中的if条件打印文件

说我的目录中有三个文件 dir

touch a.ym b.ym a.job 
Run Code Online (Sandbox Code Playgroud)

*.ym如果没有相应的*.job文件,则需要打印所有内容。所以我尝试了

for file in $(find ${dir} -name \*.ym);do
    filebase=$(basename $file)
    sample_id=$(echo "${filebase}"| awk -F'[.]' '{print $1}')
    if  [[ $sample_id != *".job" ]]; then
          echo "${file}"
    fi
done
Run Code Online (Sandbox Code Playgroud)

但是,上述解决方案是同时打印出

a.ym b.ym文件,我只b.ym需要打印出文件

bash shell if-statement

2
推荐指数
1
解决办法
56
查看次数

基于索引列合并两个数据帧

我有两个数据框,我想根据匹配的行将它们合并为一个数据框。我的数据框看起来像这样

DF_1

设置_1传真_1传真_2
Abc_1 45 76
Abc_2 46 77
Abc_3 47 78
Abc_4 48 79
Abc_5 49 80
Abc_6 50 81
Abc_7 51 82
Abc_8 52 83
Abc_9 53 84
Abc_10 54 85

df_2

设置_1传真_3传真_4
Abc_1 69 42
Abc_2 70 43
Abc_3 71 44
Abc_6 72 45
Abc_5 73 46
Abc_6 74 47
Abc_7 75 48
Abc_8 76 49
Abc_9 77 50
Abc_10 78 51
Abc_11 55 86
Abc_12 56 87
Abc_13 57 88
Abc_14 58 89
Abc_15 59 90 …

python pandas

1
推荐指数
2
解决办法
7135
查看次数

如果75%的列值等于0,如何从数据框中删除行

我有一个44列和60,000行的数据框.如果它有0到75%的列,我想删除这些行.这个75%:例如在我的情况下,44列中的33列.所以我在R中尝试了以下功能,

filter <- apply(df, 1,function(x) any(x[1:33]!=0) && any(x[34:44]!=0) )
df = df[filter,]
Run Code Online (Sandbox Code Playgroud)

它非常适合我要求的那些专栏.但问题是我的数据框有很多行,其值如此,对于某些行,在备用模型中有零,即一列其数值则为零,依此类推.这有时超过33列,上面的函数避免了这些行.

到目前为止,我在R中尝试过,我可以在熊猫中尝试的任何解决方案也都很棒..我知道当熊猫中的所有值都不等于零时

 df[(df != 0).all(1)]
Run Code Online (Sandbox Code Playgroud)

这是我的数据框的样子,

dim(df)
[1] 57905    44
head(df)

     ID Pe_1    Pe_2    Pe_3    Pe_4    Pe_5    Pe_6    Pe_7    Pe_8    Pe_9    Pe_10   Pe_11   Pe_12   Pe_13   Pe_14   Pe_15   Pe_16   Pe_17   Pe_18   Pe_19   Pe_20   Pe_21   Pe_22   Pe_23   Pe_24   Pe_25   Pe_26   Pe_27   Pe_28   Pe_29   Pe_30   Pe_31   Pe_32   Pe_33   Pe_34   Pe_35   Pe_36   Pe_37   Pe_38   Pe_39   Pe_40   Pe_41   Pe_42   Pe_43   Pe_44
ENSG1   0   0   1   0   0   2   2   1   0   0   0 …
Run Code Online (Sandbox Code Playgroud)

python numpy r pandas

0
推荐指数
1
解决办法
1072
查看次数

如果(满足条件)如何向列的行添加前缀

我有一个包含某些列和行的数据框,如果满足某些条件,我需要在其中一列的行中添加前缀,

df = pd.DataFrame({'col':['a',0,2,3,5],'col2':['PFD_1','PFD_2','PFD_3','PFD_4','PFD_5']})
Samples=pd.DataFrame({'Sam':['PFD_1','PFD_5']})
Run Code Online (Sandbox Code Playgroud)

我需要根据样本数据框中的值向 df.col2 添加后缀,我用 np.where 进行了尝试,如下所示,

df['col2'] = np.where(df.col2.isin(samples.Sam),'Yes' + df.col2, 'Non_'+ df.col2)
Run Code Online (Sandbox Code Playgroud)

这会引发错误,

TypeError: can only perform ops with scalar values
Run Code Online (Sandbox Code Playgroud)

它不会返回我所要求的内容,并且在数据帧最后抛出错误应该是这样的,

>>>df.head()

col col2
a   Yes_PFD_1
0   no_PFD_2
2   no_PFD_3
3   no_PFD_4
5   Yes_PFD_5
Run Code Online (Sandbox Code Playgroud)

python pandas

0
推荐指数
1
解决办法
4557
查看次数

XML :: Bare无法通过包"0"找到对象方法"解析"

我有一个脚本如下,它被要求在foreach循环内部做.脚本如下,

use XML::Bare;

foreach my $i (1..100){
   my $xml=XML::Bare->new(
    file=>"/tmp/lcms$i.xml"
    );
    my %root=%{ $xml->parse() };
    #..do something with %root...
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我有以下错误,

Can't locate object method "parse" via package "0" (perhaps you forgot to load "0"?) at telephone.pl line 8
Run Code Online (Sandbox Code Playgroud)

我是perl XML :: Bare模块的新手,如果有人能在这个学习曲线中指导我,那将会很棒

xml perl

0
推荐指数
1
解决办法
128
查看次数

标签 统计

pandas ×9

python ×9

numpy ×4

bash ×1

dictionary ×1

if-statement ×1

math ×1

merge ×1

multiple-columns ×1

perl ×1

r ×1

scipy ×1

seaborn ×1

shell ×1

suffix ×1

xml ×1