固定由列表列表构成的数据框

时间:2019-07-12 04:30:48

标签: python pandas list dataframe

抱歉,我是新来的,我的问题是:

  

我从.bed文件中创建了24个表,然后用所有这些表创建了一个列表,并且我只选择了每个表中的特定行,结果是另一个列表,但是当我尝试仅在数据帧中进行转换时将每个表都计为字符串。每24个表格的列数相同

我尝试过使用DataFrame和Series的Pandas

mylist = (chr1 , chr2, chr3, chr4, chr5, chr6, chr7, chr8, chr9, chr10, chr11, chr12, chr13, chr14, chr15, chr16, chr17, chr18, chr19, chr20, chr21, chr22, chrX, chrY)   

list2= []

for i in mylist:
   list2.append(i.loc[i[3]=='U28',:])

df = pd.DataFrame(list2)
df

这是我对lis2的结果,

 [             0          1          2    3
  172       chr1      12061      12062  U28
  174       chr1      12064      12079  U28

 [176650 rows x 4 columns],              0          1          2    3
  9954      chr2      45229      45231  U28
  9978      chr2      45280      45284  U28
  9981      chr2      45288      45292  U28

 [132574 rows x 4 columns],              0          1          2    3
  1394      chr3      63185      63190  U28
  1396      chr3      63192      63197  U28
  1398      chr3      63206      63215  U28
  .....

当我打电话给DataFrame时就会发生这种情况

    0
0   0 1 2 3 172 ...
1   0 1 2 3 9954...
2   0 1 2 3 1394...
3   0 1 2 3 3516...
4   0 1 2 3 8894...

5 0 1 2 3 1471 ...    6 0 1 2 3 8385 ...     ......

我想像这样将所有数据合并到同一数据框中

              0          1          2    3
 172       chr1      12061      12062  U28
 174       chr1      12064      12079  U28
 9954      chr2      45229      45231  U28
 9978      chr2      45280      45284  U28
 9981      chr2      45288      45292  U28
 1394      chr3      63185      63190  U28
 1396      chr3      63192      63197  U28
 1398      chr3      63206      63215  U28

1 个答案:

答案 0 :(得分:0)

在您的示例中,您需要遍历list2的每个元素,然后将项目附加到空数据框中。 参见以下示例:

= ^ .. ^ =

import pandas as pd
from io import StringIO

# create raw data
raw_data = StringIO("""
0 1 2 3
172 chr1 12061 12062 U28
174 chr1 12064 12079 U28
""")

# load data into data frame
df = pd.read_csv(raw_data, sep=' ')


# create raw data
raw_data = StringIO("""
0 1 2 3
9954 chr2 45229 45231 U28
9978 chr2 45280 45284 U28
9981 chr2 45288 45292 U28
""")

# load data into data frame
df2 = pd.read_csv(raw_data, sep=' ')

# create list of data frames
df_list = [df, df2]

# append data frames
df_final = pd.DataFrame()
for item in df_list:
    df_final = df_final.append(item)

输出:

         0      1      2    3
172   chr1  12061  12062  U28
174   chr1  12064  12079  U28
9954  chr2  45229  45231  U28
9978  chr2  45280  45284  U28
9981  chr2  45288  45292  U28