pandas 基本用法

因为以前很少用pandas,但这两周用它处理数据比较多,因此做下小结。我的感受应该和大家一样,就是pandas处理列很方便。

大纲

  1. pandas与dict的相互转换
  2. 取所有的列名
  3. 取某几列
  4. 改变某几列的类型
  5. 缺失值填充
  6. to_csv()
  7. 元素为list
  8. unique
  9. 新增一列
  10. dataframe合并
  11. dataframe的one-hot

0. pandas与dict的相互转换

import pandas as pd

### dict2pandas
# 按列生成
d = {
    'Name':['Alisa','Bobby','jodha','jack','raghu','Cathrine',
            'Alisa','Bobby','kumar','Alisa','Alex','Cathrine'],
    'Age':[26,24,23,22,23,24,26,24,22,23,24,24],
      
       'Score':[85,63,55,74,31,77,85,63,42,62,89,77]}
 
df = pd.DataFrame(d,columns=['Name','Age','Score'])

# 按行生成
data = {'row_1': [3, 2, 1, 0], 'row_2': ['a', 'b', 'c', 'd']}
pd.DataFrame.from_dict(data, orient='index')
'''
       0  1  2  3
row_1  3  2  1  0
row_2  a  b  c  d
'''
pd.DataFrame.from_dict(data, orient='index',columns=['A', 'B', 'C', 'D'])
'''
       A  B  C  D
row_1  3  2  1  0
row_2  a  b  c  d
'''

### pandas2dict
d = {'col1': [[1,2], [2,3]], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
#按列
df.to_dict('list')
# {'col2': [3, 4], 'col1': [[1, 2], [2, 3]]}

# 按行
df.to_dict('records')

#每一列的类型
print type(df['col1'])
#pandas.core.series.Series

pandas2dict还有很多种形式可以选择。

1. 取所有的列名

#方法1, 有人验证该方法最快
_CSV_COLUMNS = df.columns.values.tolist()

#方法2
_CSV_COLUMNS = list(df.columns.values)

#方法3
_CSV_COLUMNS = list(df)

2. 取某几列

df1 = df[["Name", "Age"]]

3. 改变某几列的类型

print df.dtypes
'''
Name     object
Age       int64
Score     int64
'''
# 方法1
df[["Age"]] = df[["Age"]].astype(str)
'''
Age     object
Name    object
Score     int64
'''

# 方法2
df.Age = df.Age.astype(str)

注意,在这个方法里一定是赋值给自身,不然会报错!!!

4. 缺失值填充

# 对所有的nan填充
df.fillna("0")

# 对某一列填充
df["Age"] = df["Age"].fillna("0")

5. to_csv()

df = pd.DataFrame({'name': ['Raphael', 'Donatello'],
'mask': ['red', 'purple'],
'weapon': ['sai', 'bo staff']})

df.to_csv(index=False)
'''
# 'name,mask,weapon\nRaphael,red,sai\nDonatello,purple,bo staff\n'
# 否则会变成
# ',name,mask,weapon\nRaphael,red,sai\nDonatello,purple,bo staff\n'
# 莫名其妙多了一列
'''

有点坑啊,一定要记得带参数index=False

6. 元素为list

d = {'col1': [[1,2], [2,3]], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
print df
"""
     col1  col2
0  [1, 2]     3
1  [2, 3]     4

"""

但是有个问题,带list元素的df可以保存到csv文件,但是读出来时元素类型变成了str。

7. unique

df["col1"].unique()

多补充一句,numpy里也有unique的用法,numpy.unique(a)

8. 新增一列

df[new_column_name] = new_values

### insert
df.insert(column_index, column_name, column_values)

9. dataframe合并

# 按列合并
df1=pd.DataFrame(np.random.randn(3,4),columns=['a','b','c','d'])
df2=pd.DataFrame(np.random.randn(3,3),columns=['e','f','g'])
pd.concat([df1,df2], axis=1)
'''
          a         b         c         d         e         f         g
0  0.266801  0.272503  0.809910  0.087132  0.195794  0.802969  0.475941
1 -0.704941 -0.026970 -0.305641 -1.686097 -1.006638 -0.468813 -0.772434
2  0.595480 -1.912895 -1.079995 -0.890516 -0.045435 -1.386298  0.716604
'''

此外,还有merge的用法,和SQL的join类似

10. dataframe的one-hot

d = {'col1': [[1,2], [2,3]], 'col2': ["a", "b"]}
df = pd.DataFrame(data=d)
pd.get_dummies(df['col2']).astype('float')
#astype('float')是因为get_dummies得到的类型为unit8,需要转化成float后才行进行数值计算

astype('float')是因为get_dummies得到的类型为unit8,需要转化成float后才行进行数值计算

你可能感兴趣的:(pandas 基本用法)