Saya memiliki daftar bingkai data panda yang saya dapatkan menerapkan fungsi groupby dan saya ingin menambahkannya kolom baru dengan frekuensi setiap KMER. Saya melakukan itu dengan loop tetapi saya mendapat peringatan pesan bahwa saya perlu menggunakan df.loc [index, col_names]. Ini dia tautan ke salah satu contoh file CSV: https://drive.google.com/file/d/ 17VYBIEZA7L-1MFNAVGGO1QJCJPDHXG7C / View? USP = Berbagi

"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"

Loop berfungsi tetapi saya ingin memiliki kode yang bersih dan efisien untuk diterapkan.

Daftar DFS adalah seperti itu:

  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

Dan saya ingin melakukan ini tanpa peringatan aneh untuk setiap DF yang dikelompokkan dalam daftar:

    [  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]

Setiap bantuan akan dihargai!

Paulo.

Kode saya:

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

Semoga ini bisa membantu memahami! Saya mendapat tabel baru tetapi saya ingin menggunakan kode yang tepat untuk menghindari peringatan itu! Saya mencoba menggunakan LOC dan indeks tetapi saya tidak cukup pintar untuk menyelesaikannya masih!

-2
Paulo Sergio Schlogl 4 April 2021, 01:12

2 jawaban

Jawaban Terbaik

Ini adalah pengaturan yang berhubungan dengan kesalahan. Ini penting - baca di atasnya di sini. Biasanya Anda dapat menghindarinya dengan .loc dan dengan menghindari pengiris ulang, tetapi dalam beberapa kasus di mana Anda harus mengiris berulang kali Anda dapat mengatasinya dengan mengakhiri .copy() ke ujung ekspresi. Anda dapat belajar kapan dan mengapa ini penting melalui tautan. Untuk jawaban yang lebih tepat untuk bagaimana ini muncul dari kode Anda, Anda harus menunjukkan kepada kami MRCE dari kode Anda.

1
k_n_c 5 April 2021, 12:28

Jika daftar bingkai data Anda disebut dfs, Anda dapat membuat masing-masing frequency pengambilan kolom dfs[i].counts dibagi dengan dfs[i].counts.sum().

for i in range(len(dfs)):
    dfs[i]['frequency'] = dfs[i].counts / dfs[i].counts.sum()

# [  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
# ...
1
tdy 3 April 2021, 22:44