三种方法简介
1 使用列表中嵌套字典进行整理信息
通过豆瓣电影Top250学习了新的整理信息为table的方法,即使用列表中嵌套字典进行整理信息,新建的变量会较少,代码结构也很清晰。
是目前我能想到的最好方式。
# 列表中嵌套字典进行整理信息table=[]for i in line.split(","):row={"a":i[1],"b":i[2]}table.append(row)pd.DataFrame(table)
2 使用列表中嵌套列表进行整理信息
先整理出整个表格为二维list,然后再转化为df
table=[]for i in line:a=i[1]b=i[2]row=[a,b]table.append(row)column_names=["a","b"]pd.DataFrame(table,column_names)
3 先整理每列信息,然后再整理df
这种方式则是先整理出每列信息list,然后再整理为df
以前都是用这种方式,发现会新建很多中间变量,有点繁琐
a_list=[]b_list=[]for i in line:a=i[1]b=i[2]a_list.append(a)b_list.append(b)dict_={"a":a_list,"b":b_list}pd.DataFrame(dict_)
比较三种方法优劣
方法一之列表中嵌套字典转化为df的好处是,如果某些行的字典的键有所缺失或有特别的键也能够整理成dataframe,举个例子
>>> import pandas as pd>>> dict1={"a":1,"b":2,"c":3}>>> dict2={"a":2,"c":3}>>> table=[dict1,dict2]>>> pd.DataFrame(table)a b c0 1 2.0 31 2 NaN 3
利用这一点就很适用于整理爬取的信息,先解析为字典,然后再转化为df。然后再进行数据清洗。
如果是通过方法二之列表中嵌套列表再转化为df,其实也可以转化。但就是需要注意如果获取不到信息记得返回None,注意各个列表的相同索引的信息要匹配
>>> import pandas as pd>>> list1=[1,2,3]>>> list2=[2,None,3]>>> table=[list1,list2]>>> df=pd.DataFrame(table,columns=["a","b","c"])>>> dfa b c0 1 2.0 31 2 NaN 3
方法二之列表中嵌套列表这种方式就算列表嵌套列表的长度不齐,也可以成功转化,但可能实际用途不大,毕竟容易错位
>>> import pandas as pd>>> list1=[1,2,3]>>> list2=[2,3]>>> table=[list1,list2]>>> df=pd.DataFrame(table,columns=["a","b","c"])>>> dfa b c0 1 2 3.01 2 3 NaN>>> df.info()<class 'pandas.core.frame.DataFrame'>RangeIndex: 2 entries, 0 to 1Data columns (total 3 columns):# Column Non-Null Count Dtype--- ------ -------------- -----0 a 2 non-null int641 b 2 non-null int642 c 1 non-null float64dtypes: float64(1), int64(2)memory usage: 176.0 bytes
如果是用方法三对每列先整理成列表,如果长度不齐,就会出现问题
>>> import pandas as pd>>> list1=[1,2,3]>>> list2=[2,3]>>> dict_={"a":list1,"b":list2}>>> pd.DataFrame(dict_)ValueError: arrays must all be same length
