从 CSV 文件中读取数据
这个数据集是一个列表,蒙特利尔的 7 个不同的自行车道上每天有多少人。
broken_df = pd.read_csv('../data/bikes.csv')
# 查看前三行
broken_df[:3]
你可以看到这完全损坏了,说明读取方式不合适。 read_csv 拥有一堆选项能够让我们修复它,在这里我们:
将列分隔符改成分号 ;
将编码改为 latin1(默认为 utf-8)
解析Date列中的日期
告诉它我们的日期将日放在前面,而不是月
将索引设置为 Date
fixed_df = pd.read_csv( '../data/bikes.csv', sep=' ; ' , encoding='latin1', parse_dates=['Date'], dayfirst=True, index_col='Date')
fixed_df[:3]
从SQL库读取数据
read_sql需要2个参数: SELECT语句, 数据库连接对象。
import sqlite3
con = sqlite3.connect("../data/weather_2012.sqlite")
df = pd.read_sql("SELECT * from weather_2012 LIMIT 3", con)
选择一列,并绘制
当你读取 CSV 时,你会得到一种称为 DataFrame 的对象,它由行和列组成。 您
从数据框架中获取列的方式与从字典中获取元素的方式相同。
fixed_df['Berri 1'].plot()
直接输出表对象
complaints = pd.read_csv('../data/311-service-requests.csv')
当你查看一个大型数据框架,而不是显示数据框架的内容,它会显示一个摘要。这包括所有列,以及每列中有多少非空值。
如直接输出 complaints
查找多列,多行,子集
查看每列的类型:
df.dtypes
查找多列,列索引必须要用中括号扩起来
complaints[['Complaint Type', 'Borough']][:10]
查找多行,这里的ix索引标签函数必须是中括号[]
student.ix[[0,2,4,5,7]]
查找多列,通过ix索引标签查询指定的列
student.ix[ : , ['Name','Height','Weight']]
查询出所有12岁以上的女生姓名、身高和体重
student[(student['Sex']=='F') & (student['Age']>12)][['Name','Height','Weight']]
查看某列中各个种类出现的次数
complaints['Complaint Type'].value_counts()
查看某列中属于某个种类的数据
为了得到噪音投诉,我们需要找到 Complaint Type 列为 Noise -Street/Sidewalk 的行。 我会告诉你如何做,然后解释发生了什么。
noise_complaints = complaints[complaints['Complaint Type'] == "Noise - Street/Sidewalk"]
将多个条件与 & 运算符组合
is_noise = complaints['Complaint Type'] == "Noise - Street/Sidewalk"
in_brooklyn = complaints['Borough'] == "BROOKLYN"
complaints[is_noise & in_brooklyn][:5]
转为numpy数组类型
pd.Series([1,2,3]).values
常用函数
1)对字符串切片操作
requests['某列'] = requests['某列'].str.slice(0,5)
2)为每列添加前缀
df.add_prefix('mean_')
排序
1)将一列排序
Table[[‘某列’]].sort()
2)将多列按照某一列排序
table[['列1', '列2', '列3']].sort('列1')
3)值排序一般使用sort_values()
Student.sort_values(by = [‘sex’, ‘age’])
解析Unix时间戳
pandas 中的时间戳解析的神奇部分是 numpy datetime 已经存储为 Unix 时间戳。 所以我们需要做的是告诉 pandas 这些整数实际上是数据时间,它不需要做任何转换。
我们需要首先将这些转换为整数,然后我们可以使用 pd.to_datetime函数将我们的整数时间戳转换为 datetimes。这是一个常量时间操作,我们实际上并不改变任何数据,只是改变了 Pandas 如何看待它。
popcon['atime'] = popcon['atime'].astype(int)
popcon['atime'] = pd.to_datetime(popcon['atime'], unit='s')