2016-05-18 12 views
0

1つの列と2000行しか持たないテーブルをインポートしています。該カラムは、異なる長さを有するロングDNA配列を含む。csv dataframeをインポートし、それをPythonの文字列に変換します

import pandas as pd 
dna=pd.read_csv("mydna.csv",header=None) 

私はいくつかのDNAにアクセスして、文字列に一つずつ列を変換する必要があります。

samples=dna.loc[:10] 

その後、私はそれが自動的にちょうど少数のシーケンスを取り、it.itの残りのため...を使用することを実現それらの全てを同じ長さとみなし、残りのDNA配列については...を挿入する。これは私のデータは文学、のように見える方法です:私は、DNAの内容をカウントしたい場合

print(samples) 
                0 
0 CGGCCTAACCTGGCTCTCCCAACCTTCAAGCGGCCGGGACCCCGCC... 
1 GAGAAAGTAACTGGGTGGCCTCCTCAGTCTCTCCACCACTCAGATT... 
2 AAGAACTCCTCCAGGCTCTGACCACTCTCCCAGCCTCGCACAGCGC... 
3 GGGAGGCTGAGGCAGGGGGATTGCTTGAGCCCAGGACTTTGAGAAG... 
4 GAGTACAGTGGTACGATCTCGGCTCACTGCAGCCTCAACCTCCCAG... 
5 GAAACAAATGGATTTTTTTACTACAAATCTCCAGGTTTTTTGGGTT... 
6 TCATCTTCCGCACCCGAGCCCCGGGCTCACTCGCTGGGGCTGCCGG... 
7 CACAATAATCAGTATTTCTACACAAAGGAAGCATATCCCCCTATTA... 
8 TTTCTGTTTGCTGAGCTGTCACTCAAGCTAAACAGATAGCAACAGG... 
9 GTTGCCTAGGCTGATCTTGAACTCCTGGGCTTAAGCAGTCCACCCG... 
10 GAACTATGTAACTAGCAGCCTCTGGCTTGTTTTCTACTCCCTGTCC... 

問題は悪化します。 dna文字列として...spacesnumbersと考えています。各列(行)の長さは異なりますが、長さはすべて77です。

len(str(dna.loc[2])) 
    Out[27]: 77 

len(str(dna.loc[3])) 
Out[28]: 77 

str(dna.loc[1]) 
Out[41]: '0 GAGAAAGTAACTGGGTGGCCTCCTCAGTCTCTCCACCACTCAGATT...\nName: 1, dtype: object' 

count_kmers(str(dna.loc[1]), 1) #function that counts dna contents 

Out[40]: 
{'\n': 1,' ': 7,',': 1,'.': 3,'0': 1,'1': 1,':': 2,'A': 11,'C': 14,'G': 10,'N': 1,'T': 11,'a': 1,'b': 1,'c': 1,'d': 1,'e': 3,'j': 1,'m': 1,'o': 1,'p': 1,'t': 2,'y': 1} 

それがすべて間違って、私はちょうどそれの大部分を除去する'A','T','C','G'を必要とし、残りの文字列は、単に変換した後に生成されます。
どのように解決することができます1)シーケンスの問題の長さと2)文字列に変換した後に'0 ...\nName: 1, dtype: object'部分を無視する方法?

答えて

1

あなたはただ、...だけで表示するためのもので、DNAがすでに文字列で、パンダはあなたのデータを変更しない、インデックスについて混乱しているようだ

>>> dna[0][0] 
    'CGGCCTAACCTGGCTCTCCCAACCTTCAAGCGGCCGGGACCCCGCCCGGCCTAACCTGGCTCTCCCAACCTTCAAGCGGCCGGGACCCCGCC' 
>>> type(dna[0][0]) == str 
    True 
+0

感謝:

は、あなたはおそらく、やりたいことはこれです。私は 'count_kmer'関数に送る理由を理解できません。正確な文字列は' ... 'で表示されます。 – Cina

1

問題は、あなたが持っているということですDataFrameないSeries (1次元配列)ので、インデックスは[1 x 1]オブジェクトを返し、スカラー文字列は返しません。返信用

import pandas as pd 

dna = pd.read_csv("mydna.csv",header=None)[0] # note the [0] 

assert isinstance(dna[0], str) 

count_kmers(dna[1], 1) # no need to use str() or .loc now 
+0

ご返信ありがとうございます。もう一つの問題があります。私がこれを実行すると、このエラーが発生します。「TypeError: 'Seriesオブジェクトは変更可能です。したがって、ハッシュすることはできません。これを解決するための提案がありますか?thx – Cina

+1

@ dina'シリーズオブジェクトをdictなどのキーとして使用しようとしているように、@Cinaは聞こえます。 – aldanor

関連する問題