说我有三本字典
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) 我有一个数据帧如下.我需要在三种情况之间对此进行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)
但是如果有任何优雅的解决方案会很好,因为我的初始数据框很大并且有许多名称和条件可供比较
我有一个文本文件(制表符分隔),我需要计算文本文件中每列的概率和熵.这是我的文本文件的样子:
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)
但是我收到以下错误消息: …
我有一个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) 我有两个数据框
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列中的行完全匹配
我想根据 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)
任何建议和帮助都非常感谢
说我的目录中有三个文件 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需要打印出文件
我有两个数据框,我想根据匹配的行将它们合并为一个数据框。我的数据框看起来像这样
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 …
我有一个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) 我有一个包含某些列和行的数据框,如果满足某些条件,我需要在其中一列的行中添加前缀,
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) 我有一个脚本如下,它被要求在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模块的新手,如果有人能在这个学习曲线中指导我,那将会很棒