Python中最常用的数据形式莫过于DataFrame了,基本上每次使用多多少少都要百度一下,终于想起了写一个DataFrame的系列文章,把DataFrame使用过的一些方法做一个系列文章,方便以后的查阅,也做一个分享。这篇博文主要介绍,DataFrame的创建方式。
目录
1.read_csv()方法
2.read_table()方法
3.read_excel()方法
4.dict和dataframe相互转换
4.1dict转为dataframe
4.2dataframe转为dict
5.list和dataframe相互转换
5.1简单列表转换
5.2双列表转换
5.3包含不同子列表的列表转换
5.4转换之后,列重命名
5.5dataframe转换为list
6.array和dataframe相互转换
6.1dataframe转化成array
6.2array转化成dataframe
1.read_csv()方法
Pandas的read方法,属于一大类,大家有兴趣可以研究一下,这里只写一些简单的读取方式。
read_csv()这个方法是最常用的,一般我们都会把csv、txt数据读取到dataframe中,看下用法:
sep表示分隔符,一般情况下csv文件用逗号分隔,txt文件用table键分隔,不过具体情况要看文件的存储方式,也有可能csv文件用的是table键存储的,如果遇到读取出的dataframe都挤在一列,最大的可能就是分隔符没有用对。
header代表要不要列名,这里选择要。
#读取csv文件
df1=pd.read_csv('.../train.csv', sep=',', header='infer')
#读取txt文件
df2=pd.read_csv('.../dict.txt', sep='\t', header='infer')
看下结果:
2.read_table()方法
read_table和read_csv用法基本一致,如下:
#读取csv文件
df1=pd.read_table('.../train.csv', sep=',', header='infer')
#读取txt文件
df2=pd.read_table('.../dict.txt', sep='\t', header='infer')
3.read_excel()方法
该方法主要用来读取Excel 文件或 xlrd 工作簿
df2=pd.read_excel('.../bund.xlsx', sep='\t', header='infer')
4.dict和dataframe相互转换
4.1dict转为dataframe
dicts = {'name':['张三','李四','王洼'],'age':[20,30,25]}
#直接写入参数
df1 = pd.DataFrame(dicts)
#字典型赋值
df2 = pd.DataFrame(data=dicts)
#from_dict 写入参数
df3 = pd.DataFrame.from_dict(dicts)
#from_dict字典型赋值
df4 = pd.DataFrame.from_dict(data=dicts)
结果是一样的:
这里要注意:不能传入只有一个的情况,看下下面案例:
这里会报错,说需要一个index,这是因为,提供的是一个标量,必须还得提供一个索引Index
pd.DataFrame({'name':'张三','age':20})
#报错
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3325, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-76-4a950dcef3db>", line 1, in <module>
pd.DataFrame({'name':'张三','age':20})
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 392, in __init__
mgr = init_dict(data, index, columns, dtype=dtype)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\construction.py", line 212, in init_dict
return arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\construction.py", line 51, in arrays_to_mgr
index = extract_index(arrays)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\construction.py", line 308, in extract_index
raise ValueError('If using all scalar values, you must pass'
ValueError: If using all scalar values, you must pass an index
正确方式:
pd.DataFrame({'name':'张三','age':20},pd.Index(range(1)))
结果为:
4.2dataframe转为dict
data:
a b c d
0 11 21 31 41
1 12 22 32 42
dict_data2= data.to_dict('list')
Out[102]: {'b': [21, 22], 'c': [31, 32], 'd': [41, 42]}
5.list和dataframe相互转换
5.1简单列表转换
#简单列表转换
a=[11,22,32,44]
data=pd.DataFrame(a)
#结果:
0
0 11
1 22
2 32
3 44
5.2双列表转换
a=[11,21,31,41]
b=[12,22,32,42]
c={"a" : a,
"b" : b}#将列表a,b转换成字典
data=pd.DataFrame(c)#将字典转换成为数据框
Out[83]:
a b
0 11 12
1 21 22
2 31 32
3 41 42
5.3包含不同子列表的列表转换
a=[[11,21,31,41],[12,22,32,42]]
data=pd.DataFrame(a)
Out[85]:
0 1 2 3
0 11 21 31 41
1 12 22 32 42
5.4转换之后,列重命名
data.rename(columns={0:'a',1:'b',2:'c',3:'d'},inplace=True)
Out[87]:
a b c d
0 11 21 31 41
1 12 22 32 42
5.5dataframe转换为list
#将一列转为list-方法一
data['a'].values.tolist()
Out[95]: [11, 12]
#将一列转为list-方法二
data['a'].tolist()
Out[96]: [11, 12]
#将一列转为list且去除重复数据-方法一
data['a'].drop_duplicates().values.tolist()
Out[97]: [11, 12]
#将一列转为list且去除重复数据-方法二
list(set(data['a']))
Out[98]: [11, 12]
#将dataframe整体转为list
data.values.tolist()
Out[99]: [[11, 21, 31, 41], [12, 22, 32, 42]]
6.array和dataframe相互转换
这里把两个互相转换的方法都列举一下~
6.1dataframe转化成array
df=data.values
Out[89]:
array([[11, 21, 31, 41],
[12, 22, 32, 42]], dtype=int64)
6.2array转化成dataframe
data = pd.DataFrame(df)
Out[91]:
0 1 2 3
0 11 21 31 41
1 12 22 32 42
以上,是我经常使用的一些方法,欢迎大家补充~