Pandas Tutorials – DataFrame/Series与常见数据结构相互转换

DataFrame to Series

将整个DataFrame转换为Series是不合理的, 因为DataFrame中含有多个列.
正常操作是从DataFrame中选择一列, 这样会自动生成一个Series.

df = pd.DataFrame().from_dict(data={'a':[1,2,3],'b':[4,5,6]}) # df : DataFrame
se = df['a'] # se : Series

Series to DataFrame

se = pd.Series(data = np.arange(start=1,stop=11,step=1))
se_df = se.to_frame(name='rand')

通过Series.to_frame方法转换为DataFrame, 索引不变. 如果不传入name参数, 则默认转换的列名为0(需确认?); 否则,将列名设为name参数传入的值.

DataFrame to List

首先使用np.array()函数把DataFrame转化为np.ndarray(),再利用tolist()函数把np.ndarray()转为list,示例代码如下:

import numpy as np
import pandas as pd

data_x = pd.read_csv("E:/Tianchi/result/features.csv",usecols=[2,3,4])#pd.dataframe
data_y =  pd.read_csv("E:/Tianchi/result/features.csv",usecols=[5])

train_data = np.array(data_x)#np.ndarray()
train_x_list=train_data.tolist()#list
print(train_x_list)
print(type(train_x_list))

List 转 DataFrame

DataFrame 转 Dict

Dict 转 DataFrame

假设存在字典d, 需要将其转换为pd.DataFame.

> d= {u'2012-06-08': 388, u'2012-06-09': 388, u'2012-06-10': 388, u'2012-06-11': 389}
  1. 通过from_dict进行构建.
> d_df = pd.DataFrame().from_dict(d,orient='index').reset_index()
        index    0
0  2012-06-08  388
1  2012-06-09  388
2  2012-06-10  388
3  2012-06-11  389

这样生成的DataFramecolumns分别为index0, 不太方便理解和使用. 可以通过DataFrame.rename()来对columns进行重命名.

> d_df.rename(columns={'index': 'Date', 0: 'Count'},inplace=True)
         Date  Count
0  2012-06-08    388
1  2012-06-09    388
2  2012-06-10    388
3  2012-06-11    389
  1. 通过传递list键值对, 初始化DataFrame.
>>> d_df = pd.DataFrame(data=list(d.items()),index=[5,6,7,8],columns=['Date','Count'],dtype=np.int32,copy=False)
>>> d_df
         Date  Count
5  2012-06-08    388
6  2012-06-09    388
7  2012-06-10    388
8  2012-06-11    389

copy只对其他DataFrame或其他2-D格式的数据起作用. 默认为False.

  1. 可以通过构建Seriesreset_index转为DataFrame. 不过这种方法不直接, 不建议使用.
> s = pd.Series(d, name='DateValue')
> s.index.name = 'Date'
# 这里不可以使用inplace=True来重置index, 
# 会抛出TypeError: Cannot reset_index inplace on a Series to create a DataFrame
> d_df = s.reset_index()

通过d构建Series, 后设置index.name, 最后通过reset_indexSeries s转换为DataFrame d_df.

DataFrame 转 Numpy.array

np_arr = df.values

Numpy.array 转 DataFrame

df = pd.DataFrame(np_arr)