三种方法简介

1 使用列表中嵌套字典进行整理信息

通过豆瓣电影Top250学习了新的整理信息为table的方法,即使用列表中嵌套字典进行整理信息,新建的变量会较少,代码结构也很清晰。

是目前我能想到的最好方式。

  1. # 列表中嵌套字典进行整理信息
  2. table=[]
  3. for i in line.split(","):
  4. row={"a":i[1],"b":i[2]}
  5. table.append(row)
  6. pd.DataFrame(table)

2 使用列表中嵌套列表进行整理信息

先整理出整个表格为二维list,然后再转化为df

  1. table=[]
  2. for i in line:
  3. a=i[1]
  4. b=i[2]
  5. row=[a,b]
  6. table.append(row)
  7. column_names=["a","b"]
  8. pd.DataFrame(table,column_names)

3 先整理每列信息,然后再整理df

这种方式则是先整理出每列信息list,然后再整理为df

以前都是用这种方式,发现会新建很多中间变量,有点繁琐

  1. a_list=[]
  2. b_list=[]
  3. for i in line:
  4. a=i[1]
  5. b=i[2]
  6. a_list.append(a)
  7. b_list.append(b)
  8. dict_={"a":a_list,"b":b_list}
  9. pd.DataFrame(dict_)

比较三种方法优劣

方法一之列表中嵌套字典转化为df的好处是,如果某些行的字典的键有所缺失或有特别的键也能够整理成dataframe,举个例子

  1. >>> import pandas as pd
  2. >>> dict1={"a":1,"b":2,"c":3}
  3. >>> dict2={"a":2,"c":3}
  4. >>> table=[dict1,dict2]
  5. >>> pd.DataFrame(table)
  6. a b c
  7. 0 1 2.0 3
  8. 1 2 NaN 3

利用这一点就很适用于整理爬取的信息,先解析为字典,然后再转化为df。然后再进行数据清洗。

如果是通过方法二之列表中嵌套列表再转化为df,其实也可以转化。但就是需要注意如果获取不到信息记得返回None,注意各个列表的相同索引的信息要匹配

  1. >>> import pandas as pd
  2. >>> list1=[1,2,3]
  3. >>> list2=[2,None,3]
  4. >>> table=[list1,list2]
  5. >>> df=pd.DataFrame(table,columns=["a","b","c"])
  6. >>> df
  7. a b c
  8. 0 1 2.0 3
  9. 1 2 NaN 3

方法二之列表中嵌套列表这种方式就算列表嵌套列表的长度不齐,也可以成功转化,但可能实际用途不大,毕竟容易错位

  1. >>> import pandas as pd
  2. >>> list1=[1,2,3]
  3. >>> list2=[2,3]
  4. >>> table=[list1,list2]
  5. >>> df=pd.DataFrame(table,columns=["a","b","c"])
  6. >>> df
  7. a b c
  8. 0 1 2 3.0
  9. 1 2 3 NaN
  10. >>> df.info()
  11. <class 'pandas.core.frame.DataFrame'>
  12. RangeIndex: 2 entries, 0 to 1
  13. Data columns (total 3 columns):
  14. # Column Non-Null Count Dtype
  15. --- ------ -------------- -----
  16. 0 a 2 non-null int64
  17. 1 b 2 non-null int64
  18. 2 c 1 non-null float64
  19. dtypes: float64(1), int64(2)
  20. memory usage: 176.0 bytes

如果是用方法三对每列先整理成列表,如果长度不齐,就会出现问题

  1. >>> import pandas as pd
  2. >>> list1=[1,2,3]
  3. >>> list2=[2,3]
  4. >>> dict_={"a":list1,"b":list2}
  5. >>> pd.DataFrame(dict_)
  6. ValueError: arrays must all be same length