【Python】DataFrame系列1之创建方法和其他数据类型list\array之间的转换

        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

以上,是我经常使用的一些方法,欢迎大家补充~

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值