pandas创建数据帧,浮点数是对象,如何转换?

时间:2014-05-11 10:04:54

标签: python pandas

我有一个文本文件:

sample    value1    value2
A    0.1212    0.2354
B    0.23493    1.3442

我导入它:

with open('file.txt', 'r') as fo:
    notes = next(fo)
    headers,*raw_data = [row.strip('\r\n').split('\t') for row in fo] # get column headers and data
    names = [row[0] for row in raw_data] # extract first row (variables)
    data= np.array([row[1:] for row in raw_data],dtype=float) # get rid of first row

如果我然后转换它:

s = pd.DataFrame(data,index=names,columns=headers[1:])

数据被识别为浮点数。我可以通过s = s.reset_index()将样本名称作为列返回。

如果我这样做

s = pd.DataFrame(raw_data,columns=headers)

浮点数是对象,我无法执行标准计算。

您将如何制作数据框?将数据导入为dict更好吗?

BTW我正在使用python 3.3

2 个答案:

答案 0 :(得分:1)

您可以将数据文件直接解析为数据框,如下所示:

df = pd.read_csv('file.txt', sep='\t', index_col='sample')

哪个会给你:

         value1  value2
sample                 
A       0.12120  0.2354
B       0.23493  1.3442

[2 rows x 2 columns]

然后,你可以进行计算。

答案 1 :(得分:0)

要解析这样的文件,应该使用pandas read_csv函数。

以下是一个最小示例,显示使用参数delim_whitespace设置为True的{​​{3}}

import pandas as pd
from StringIO import StringIO  # Python2 or
from io import StringIO  # Python3

data = \
"""sample    value1    value2
A    0.1212    0.2354
B    0.23493    1.3442"""

# Creation of the dataframe
df = pd.read_csv(StringIO(data), delim_whitespace=True)