『Python学习』pandas进阶学习笔记

Pandas数据分析基础
python

http://blog.csdn.net/cbbing/article/details/50721468
数组

一、函数

# 输出系统当前时间
now = datetime.now()
print now
print now.day
print now.weekday()    # 有疑问  为什么比真实时间晚一天?是由于时区问题?

二、
from datetime import date, time

print time(3, 24)    # 3时24分

三、"strptime" 方法能够根据需求形式解析用字符串表示的日期或时间字段。
test_time = "2/20/09 16:03"
print datetime.strptime(test_time, "%m/%d/%y %H:%M")      # 必须严格对照原格式, 感受很不实用

四、事实证实 "dateutil" 库中的日期解析器要远比 "strptime" 要强大得多spa

from dateutil.parser import parse

test_time_1 = "2/20/09 16:03"
test_time_2 = "2009/2/20 16:03:01"
test_time_3 = "2009-2-20 16:03:01"
test_time_4 = "2009-2/20 16:03:01"

print parse(test_time_1)
print parse(test_time_2)
print parse(test_time_3)
print parse(test_time_4)
 # 输出结果
2009-02-20 16:03:00
2009-02-20 16:03:01
2009-02-20 16:03:01
2009-02-20 16:03:01


五、为了简单起见,Pandas提供了“to_datetime”方法来识别字符串形式的一整个序列,并将其转换为“datetime”对象。.net

file = pd.read_csv(path)
print pd.to_datetime(file.time)
print pd.to_datetime([None])
注:Pandas 中对于时间类型的缺失值有一个特定的值,“NaT”


六、code

file = pd.read_csv(path, index_col=None)
#print file.number    # 报错没有 number 属性?是由于使用它来做为 index_col 了?当 index_col 设定为 None 时能够正常输出
print file.time

七、unique 输出序列的元素,且重复值只输出一次(即去重)


八、merge: 将两个 DataFrame 对象按键(key)合并
merge的参数形式以下: 
对象

pd.merge(left, right, how='inner', on=None, left_on=None, blog

                      right_on=None, left_index=False,right_index=False, 索引

                             sort=False, suffixes=('_x', '_y'), copy=True, indicator=False) 字符串

其中 : left : 数据框,right : 数据框 how : {'left', 'right', 'outer', 'inner'}, 默认值为 'inner'
* left: 只使用left数据框的键值 

* right: 只使用right数据框的键值

* outer: 使用两个数据框键值的并集

* inner: 使用两个数据框键值的交集       

# 当两个数据框有一个共同的列名时, 默认以该列的值做为合并时的键值
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test3=range(20, 26)))
print pd.merge(df1, df2)          # 默认以两个数据框的键值的交集为键值

# 输出结果
 test1  test2  test3
0      0     10     20
1      0     10     23
2      1     11     21
3      1     11     24
4      2     12     22
5      2     12     25


# 因为 merge 默认以两个数据框的键值的交集为键值, 故当交集为空时, 合并后的数据框也为空
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(10, 13) * 2, test3=range(20, 26)))
print pd.merge(df1, df2)          # 默认以两个数据框的键值的交集为键值

# 输出结果
Columns: [test1, test2, test3]
Index: []
# 当两个数据框有一个共同的列名时, 默认以该列的值做为合并时的键值
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test3=range(20, 26)))
print pd.merge(df1, df2, how="outer")          # 以两个数据框的键值的并集为键值

# 输出结果
 test1  test2  test3
0      0     10   20.0
1      0     10   23.0
2      1     11   21.0
3      1     11   24.0
4      2     12   22.0
5      2     12   25.0
6      3     13    NaN


on: 取值为标签或列表 取值即为合并的字段,要求必须同时存在与被合并的数据框,若是取值为None,而且不按照索引合并时,函数就默认按照列的交集合并。

# 当两个数据框有多个相同的列名时, 没被选择做为键的列名将会被系统标记为不一样的列名
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test2=range(10, 16), test3=range(20, 26)))
print pd.merge(df1, df2, on="test1")          # 以 test1 为键

# 输出结果
test1  test2_x  test2_y  test3
0      0       10       10     20
1      0       10       13     23
2      1       11       11     21
3      1       11       14     24
4      2       12       12     22
5      2       12       15     25

# 当两个数据框有多个相同的列名时, 没被选择做为键的列名将会被系统标记为不一样的列名
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test2=range(10, 16), test3=range(20, 26)))
print pd.merge(df1, df2, on="test2")          # 以 test2 为键

# 输出结果
 test1_x  test2  test1_y  test3
0        0     10        0     20
1        1     11        1     21
2        2     12        2     22
3        3     13        0     23

# 当两个数据框有多个相同的列名时, 能够选择多个列名做为键
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test2=range(10, 16), test3=range(20, 26)))
print pd.merge(df1, df2, on=["test1", "test2"])          # 以 test1, test2 为键

# 输出结果
 test1  test2  test3
0      0     10     20
1      1     11     21
2      2     12     22

left(right)_on: 取值为标签或列表或数组形式 left(right)数据框中用来合并的字段,能够是同数据框长度的向量或者向量列表,被用 来做为特别指定的合并键值。 

# 指定两个数据框中各自用于合并的列名
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test2=range(10, 16), test3=range(20, 26)))
print pd.merge(df1, df2, left_on="test1", right_on="test1")          # 以 "test1" 为键

# 输出结果
test1  test2_x  test2_y  test3
0      0       10       10     20
1      0       10       13     23
2      1       11       11     21
3      1       11       14     24
4      2       12       12     22
5      2       12       15     25


left(right)_index:取值为布尔值,默认为False 使用left(right)数据框的索引做为合并键值,若是是多重索引,另外一个数据框中键值的 数目必须和索引的层级相符。

# 以行索引为键
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test2=range(10, 16), test3=range(20, 26)))
print pd.merge(df1, df2, left_index=True, right_index=True)          # 以行索引为键

# 输出结果
test1_x  test2_x  test1_y  test2_y  test3
0        0       10        0       10     20
1        1       11        1       11     21
2        2       12        2       12     22
3        3       13        0       13     23

九、联结 Concatenation

向一个已经固定行和列的数据集中分别添加行和列


十、data.dtypes 能够知道各个列的属性