Pandas 我有一个由groupby生成的df列表,我需要添加一个新的列,列的频率为kmer
我有一个使用groupby函数得到的pandas数据帧列表,我想在其中添加一个新列,其中包含每个kmer的频率。我通过一个循环实现了这一点,但收到一条消息警告我需要使用df.loc[索引,col_名称]。 这里是指向csv文件的一个示例的链接: 循环可以工作,但我希望有一个干净高效的代码来应用 dfs列表如下所示:Pandas 我有一个由groupby生成的df列表,我需要添加一个新的列,列的频率为kmer,pandas,pandas-groupby,Pandas,Pandas Groupby,我有一个使用groupby函数得到的pandas数据帧列表,我想在其中添加一个新列,其中包含每个kmer的频率。我通过一个循环实现了这一点,但收到一条消息警告我需要使用df.loc[索引,col_名称]。 这里是指向csv文件的一个示例的链接: 循环可以工作,但我希望有一个干净高效的代码来应用 dfs列表如下所示: kmers counts length 0 A 567623 1 1 C 350724 1 2 G 347436
kmers counts length
0 A 567623 1
1 C 350724 1
2 G 347436 1
3 T 564242 1
kmers counts length
4 TA 263910 2
11 AT 333672 2
18 TG 241614 2
25 GG 134462 2
32 GC 191060 2
39 CA 241614 2
46 AA 437390 2
59 TT 437390 2
109 GT 183723 2
127 TC 188869 2
197 CG 145046 2
238 CC 134462 2
318 AG 177008 2
336 AC 183723 2
388 GA 188869 2
537 CT 177008 2
kmers counts length
5 TAT 76688 3
12 ATG 60467 3
19 TGG 54513 3
26 GGC 37323 3
33 GCA 64928 3
40 CAA 93670 3
47 AAT 131279 3
53 ATT 131279 3
60 TTA 102674 3
66 TAA 102674 3
72 AAA 164986 3
92 TTG 93670 3
103 GGT 42668 3
110 GTA 46316 3
121 ATC 65235 3
128 TCA 68008 3
156 GTT 68473 3
162 TTT 164986 3
185 GTC 22371 3
191 TCG 37613 3
198 CGT 41831 3
221 CGG 25370 3
232 GCC 37323 3
239 CCG 25370 3
274 TTC 76014 3
280 TCC 32192 3
295 GTG 46545 3
301 TGC 64928 3
312 CAG 40915 3
319 AGC 48577 3
330 CAC 46545 3
337 ACA 54158 3
348 AAC 68473 3
364 ACC 42668 3
382 TGA 68008 3
389 GAT 65235 3
405 GAC 22371 3
416 CAT 60467 3
436 GAA 76014 3
442 AAG 72628 3
448 AGT 45057 3
464 TGT 54158 3
475 TAG 38228 3
481 AGG 32306 3
514 ACG 41831 3
520 CGA 37613 3
531 ACT 45057 3
538 CTT 72628 3
607 ATA 76688 3
613 TAC 46316 3
640 GCT 48577 3
748 CTC 25228 3
836 CTG 40915 3
881 AGA 51053 3
992 CTA 38228 3
1096 CCA 54513 3
1155 GGG 22265 3
1241 CGC 40224 3
1272 GCG 40224 3
1322 TCT 51053 3
1534 CCC 22265 3
1615 CCT 32306 3
2171 GGA 32192 3
3599 GAG 25228 3
我希望这样做时不会对列表中的每个分组df发出奇怪的警告:
[ kmers counts length frequency
0 A 567623 1 0.310172
1 C 350724 1 0.191650
2 G 347436 1 0.189853
3 T 564242 1 0.308325,
kmers counts length frequency
4 TA 263910 2 0.072110
11 AT 333672 2 0.091172
18 TG 241614 2 0.066018
25 GG 134462 2 0.036740
32 GC 191060 2 0.052205
39 CA 241614 2 0.066018
46 AA 437390 2 0.119511
59 TT 437390 2 0.119511
109 GT 183723 2 0.050200
127 TC 188869 2 0.051606
197 CG 145046 2 0.039632
238 CC 134462 2 0.036740
318 AG 177008 2 0.048365
336 AC 183723 2 0.050200
388 GA 188869 2 0.051606
537 CT 177008 2 0.048365,
kmers counts length frequency
5 TAT 76688 3 0.020955
12 ATG 60467 3 0.016523
19 TGG 54513 3 0.014896
26 GGC 37323 3 0.010199
33 GCA 64928 3 0.017742
40 CAA 93670 3 0.025596
47 AAT 131279 3 0.035872
53 ATT 131279 3 0.035872
60 TTA 102674 3 0.028056
66 TAA 102674 3 0.028056
72 AAA 164986 3 0.045083
92 TTG 93670 3 0.025596
103 GGT 42668 3 0.011659
110 GTA 46316 3 0.012656
121 ATC 65235 3 0.017826
128 TCA 68008 3 0.018583
156 GTT 68473 3 0.018710
162 TTT 164986 3 0.045083
185 GTC 22371 3 0.006113
191 TCG 37613 3 0.010278
198 CGT 41831 3 0.011430
221 CGG 25370 3 0.006932
232 GCC 37323 3 0.010199
239 CCG 25370 3 0.006932
274 TTC 76014 3 0.020771
280 TCC 32192 3 0.008797
295 GTG 46545 3 0.012719
301 TGC 64928 3 0.017742
312 CAG 40915 3 0.011180
319 AGC 48577 3 0.013274
330 CAC 46545 3 0.012719
337 ACA 54158 3 0.014799
348 AAC 68473 3 0.018710
364 ACC 42668 3 0.011659
382 TGA 68008 3 0.018583
389 GAT 65235 3 0.017826
405 GAC 22371 3 0.006113
416 CAT 60467 3 0.016523
436 GAA 76014 3 0.020771
442 AAG 72628 3 0.019846
448 AGT 45057 3 0.012312
464 TGT 54158 3 0.014799
475 TAG 38228 3 0.010446
481 AGG 32306 3 0.008828
514 ACG 41831 3 0.011430
520 CGA 37613 3 0.010278
531 ACT 45057 3 0.012312
538 CTT 72628 3 0.019846
607 ATA 76688 3 0.020955
613 TAC 46316 3 0.012656
640 GCT 48577 3 0.013274
748 CTC 25228 3 0.006894
836 CTG 40915 3 0.011180
881 AGA 51053 3 0.013950
992 CTA 38228 3 0.010446
1096 CCA 54513 3 0.014896
1155 GGG 22265 3 0.006084
1241 CGC 40224 3 0.010991
1272 GCG 40224 3 0.010991
1322 TCT 51053 3 0.013950
1534 CCC 22265 3 0.006084
1615 CCT 32306 3 0.008828
2171 GGA 32192 3 0.008797
3599 GAG 25228 3 0.006894]
任何帮助都将不胜感激
保罗
我的代码:
df = pd.read_csv(file)
df['length'] = df['kmers'].str.len()
df_by_length = df.groupby(['length'])
dfs = [df_by_length.get_group(i) for i in range(1, 9)]
for df in dfs:
df['frequency'] = df['counts'] / df['counts'].sum()
<ipython-input-142-fd9cfa03968f>:2: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df=pd.read\u csv(文件)
df['length']=df['kmers'].str.len()
df_by_length=df.groupby(['length'])
dfs=[df_by_length.get_group(i)for i in range(1,9)]
对于dfs中的df:
df['frequency']=df['counts']/df['counts'].sum()
:2:设置为带有CopyWarning:
试图在数据帧切片的副本上设置值。
尝试改用.loc[row\u indexer,col\u indexer]=value
请参阅文档中的注意事项:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view vs-a-copy
希望这有助于理解!我得到了新表,但我想使用正确的代码来避免该警告!我尝试使用loc和索引,但我还不够聪明,无法完成它 这是一个与COPYWARNING相关的错误设置。这很重要——仔细阅读。通常,您可以使用
.loc
和避免重复切片来避免它,但在某些情况下,如果您必须重复切片,您可以通过在表达式末尾结束.copy()
来避免它。您可以通过链接了解何时以及为什么这一点很重要。为了更准确地回答这是如何从您的代码中产生的,您需要向我们展示您的代码。如果您的数据帧列表被称为dfs
,您可以创建每个frequency
列,以dfs[i].counts
除以dfs[i].counts.sum()
范围内i的(len(dfs)):
dfs[i]['frequency']=dfs[i]。计数/dfs[i]。计数。总和()
#[kmers计数长度频率
#0 A 567623 1 0.310172
#1 C 350724 1 0.191650
#2 G 347436 1 0.189853
#3 T 564242 1 0.308325,
#kmers计数长度频率
#4 TA 263910 2 0.072110
#11 AT 333672 0.091172
#18 TG 241614 2 0.066018
#25 GG 134462 2 0.036740
# ...
我解决了这个问题,只是在我的理解列表中添加了.copy(),如下所示:
dfs = [df_by_length.get_group(i).copy() for i in range(1, 9)]
然后:
它解决了警告
谢谢大家
复活节快乐
救命
Paulo我的代码类似于tdy代码。我用len做了一个groupby,然后在一个列表压缩中,我将DFs列表分组,然后做了一个类似于tdy的循环。因为它是一个大的csv,所以我尝试使用.loc(索引,“计数”).tranform(“频率”)。但效果不好。谢谢。这没有帮助。我们需要实际代码,包括a形式的示例数据。请阅读并在问题中添加a。
dfs = [df_by_length.get_group(i).copy() for i in range(1, 9)]
for df in dfs:
df['frequency'] = df['counts'] / df['counts'].sum()