将Series转DataFrame并修改列名
在使用pandas操作的时候,pandas的两个主要数据结构Series和DataFrame是我们用的最多的。
Series是一种类似于一维数组的对象,它由一组数据和一组与之相关的数据标签索引组成。DataFrame是一个表格型的数据结构,它既有行索引也有列索引,它可以被看做有Series组成的字典。
一、将Series转换为DataFrame数据结构
而将Series转换为DataFrame也是会经常遇到的,看下常用的几种方式:
直接使用字典方式
使用字典的方式,创建好对应的列名与字典值就可以了。
import numpy as np
import pandas as pd
# 将Series转换为DataFrame
data = pd.Series(np.random.randn(10)*500+1000,
index=['A37','A50','R7S','Note5',
'G7','R9_Plus','5C','X5_Pro','MX3','M5'])
df = pd.DataFrame({'Product_Name':data.index, 'Price':data.values})
print(df)
# 输出内容如下:
# Product_Name Price
# 0 A37 1000.464248
# 1 A50 657.992057
# 2 R7S 288.075879
# 3 Note5 2094.297636
# 4 G7 1886.582215
# 5 R9_Plus 1843.629256
# 6 5C 931.553668
# 7 X5_Pro 880.684009
# 8 MX3 932.247291
# 9 M5 650.789302
- 使用reset_index()方法转换
import numpy as np
import pandas as pd
# 将Series转换为DataFrame
data = pd.Series(np.random.randn(10)*500+1000,
index=['A37','A50','R7S','Note5',
'G7','R9_Plus','5C','X5_Pro','MX3','M5'])
# 通过reset_index()转换为DataFrame
df = data.reset_index(name='Price')
print(type(df))
print(df)
从如下输出可以发现,经过reset_index()方法转换后输出的df已经由一个Series结构类型转换为DataFrame,并且原来的Series标签索引列转换成了DataFrame下名为index的一列。
注:和之前使用字典方式转换不同的是我们还需要后续额外修改列名。
<class 'pandas.core.frame.DataFrame'>
index Price
0 A37 629.039268
1 A50 49.832131
2 R7S 1693.139415
3 Note5 445.894181
4 G7 1133.240339
5 R9_Plus 886.009704
6 5C 1115.016608
7 X5_Pro 894.055677
8 MX3 1014.297011
9 M5 520.398571
二、修改DataFrame的列名
由于之前我们使用reset_index()方法将Series转换为DataFrame后,但是转换后的列名还需要修改,这里可以通过使用DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None)方法修改。除了修改columns还可以修改index,十分方便。
import numpy as np
import pandas as pd
# 将Series转换为DataFrame
data = pd.Series(np.random.randn(10)*500+1000,
index=['A37','A50','R7S','Note5',
'G7','R9_Plus','5C','X5_Pro','MX3','M5'])
df = data.reset_index(name='Price')
print(df)
# 输出内容如下:
# index Price
# 0 A37 1000.464248
# 1 A50 657.992057
# 2 R7S 288.075879
# 3 Note5 2094.297636
# 4 G7 1886.582215
# 5 R9_Plus 1843.629256
# 6 5C 931.553668
# 7 X5_Pro 880.684009
# 8 MX3 932.247291
# 9 M5 650.789302
df.rename(columns={'index':'Product_Name'}, inplace=True)
print(df)
# 输出内容如下:
# Product_Name Price
# 0 A37 1000.464248
# 1 A50 657.992057
# 2 R7S 288.075879
# 3 Note5 2094.297636
# 4 G7 1886.582215
# 5 R9_Plus 1843.629256
# 6 5C 931.553668
# 7 X5_Pro 880.684009
# 8 MX3 932.247291
# 9 M5 650.789302