为了账号安全,请及时绑定邮箱和手机立即绑定

将数组列表转换为数据帧

将数组列表转换为数据帧

潇潇雨雨 2022-08-11 17:55:32
你好,我有一个看起来像这样的数据集:array([['1;"Female";133;132;124;"118";"64.5";816932'],        ['2;"Male";140;150;124;".";"72.5";1001121'],        ['3;"Male";139;123;150;"143";"73.3";1038437'],        ['4;"Male";133;129;128;"172";"68.8";965353'],        ['5;"Female";137;132;134;"147";"65.0";951545'],        ['6;"Female";99;90;110;"146";"69.0";928799'],        ['7;"Female";138;136;131;"138";"64.5";991305']], dtype=object)我想将 is 转换为具有此列的数据帧columns = ["Gender";"FSIQ";"VIQ";"PIQ";"Weight";"Height";"MRI_Count"]注意:从数组列表中,行值的分隔符是一个分号(;)。帮助我将其组织到具有列名和数组中的行值的数据帧
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

创建和系列.str.split 对于新列:DataFrameexpand=True


a = np.array([['1;"Female";133;132;124;"118";"64.5";816932'],

       ['2;"Male";140;150;124;".";"72.5";1001121'],

       ['3;"Male";139;123;150;"143";"73.3";1038437'],

       ['4;"Male";133;129;128;"172";"68.8";965353'],

       ['5;"Female";137;132;134;"147";"65.0";951545'],

       ['6;"Female";99;90;110;"146";"69.0";928799'],

       ['7;"Female";138;136;131;"138";"64.5";991305']], dtype=object)


df = pd.DataFrame(a)[0].str.split(';', expand=True)

df.columns = ['ID',"Gender","FSIQ","VIQ","PIQ","Weight","Height","MRI_Count"]

最后一些数据清理 - 由Series.str.strip删除,并通过使用DataFrame.apply to_numeric将列转换为数字:""


df['Gender'] = df['Gender'].str.strip('"')

c = ["ID", "FSIQ","VIQ","PIQ","Weight","Height","MRI_Count"]

df[c] = df[c].apply(lambda x: pd.to_numeric(x.str.strip('"'), errors='coerce'))

print (df)

  ID  Gender  FSIQ  VIQ  PIQ  Weight  Height  MRI_Count

0  1  Female   133  132  124   118.0    64.5     816932

1  2    Male   140  150  124     NaN    72.5    1001121

2  3    Male   139  123  150   143.0    73.3    1038437

3  4    Male   133  129  128   172.0    68.8     965353

4  5  Female   137  132  134   147.0    65.0     951545

5  6  Female    99   90  110   146.0    69.0     928799

6  7  Female   138  136  131   138.0    64.5     991305


查看完整回答
反对 回复 2022-08-11
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

另一个潜在的解决方案是使用io。StringIO 和 pandas.read_csv。只需用一个字符连接数组中的每个元素:\n

from io import StringIO


# Setup

a = np.array([['1;"Female";133;132;124;"118";"64.5";816932'],

       ['2;"Male";140;150;124;".";"72.5";1001121'],

       ['3;"Male";139;123;150;"143";"73.3";1038437'],

       ['4;"Male";133;129;128;"172";"68.8";965353'],

       ['5;"Female";137;132;134;"147";"65.0";951545'],

       ['6;"Female";99;90;110;"146";"69.0";928799'],

       ['7;"Female";138;136;131;"138";"64.5";991305']])


columns = ["Gender", "FSIQ", "VIQ", "PIQ", "Weight", "Height", "MRI_Count"]


df = pd.read_csv(StringIO('\n'.join(a.ravel())), header=None,

                 sep=';', names=columns, na_values=['.'])

[输出]


   Gender  FSIQ  VIQ  PIQ  Weight  Height  MRI_Count

1  Female   133  132  124   118.0    64.5     816932

2    Male   140  150  124     NaN    72.5    1001121

3    Male   139  123  150   143.0    73.3    1038437

4    Male   133  129  128   172.0    68.8     965353

5  Female   137  132  134   147.0    65.0     951545

6  Female    99   90  110   146.0    69.0     928799

7  Female   138  136  131   138.0    64.5     991305

pandas应该做得很好解释dtypes


print(df.info())


<class 'pandas.core.frame.DataFrame'>

Int64Index: 7 entries, 1 to 7

Data columns (total 7 columns):

 #   Column     Non-Null Count  Dtype  

---  ------     --------------  -----  

 0   Gender     7 non-null      object 

 1   FSIQ       7 non-null      int64  

 2   VIQ        7 non-null      int64  

 3   PIQ        7 non-null      int64  

 4   Weight     6 non-null      float64

 5   Height     7 non-null      float64

 6   MRI_Count  7 non-null      int64  

dtypes: float64(2), int64(4), object(1)

memory usage: 448.0+ bytes




查看完整回答
反对 回复 2022-08-11
  • 2 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信