三种方法简介
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 c
0 1 2.0 3
1 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"])
>>> df
a b c
0 1 2.0 3
1 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"])
>>> df
a b c
0 1 2 3.0
1 2 3 NaN
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 a 2 non-null int64
1 b 2 non-null int64
2 c 1 non-null float64
dtypes: 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