数据分析中pandas的一些常用方法
1、文件的相关操作
读:pd.read_csv(path,encoding="")
将字典转换为dataframe
pd.dataframe(dict)
2.以标签索引
df.loc[df[name"]==“Emma”],;] #取出改数据在的整行
3.求总数量
df[“商品”].size
4.日期的相关操作
from datetime import datetime
data["时间"]=pd.to_datetime(data['时间'],format='%Y/%m/%d') #将数据格式2000-01-01的格式
data['月']=data["时间"].dt.month #取出月份,也可以取出年份
data=data.loc[data["月"]==4] #索引标签为4的月份进行保存
dates = pd.date_range('today',periods=6) #输出从今天开始往后的6天的日期
data.dtypes #查看dates的数据类型
读取数据的相关操作
data.iloc[1:3] # 查询 2,3 行 位置索引
data.head() #前五行数据
data.tail(3) #最后三行数据
data.index() #查看索引
data.values() #查看data的值
data.columns() #查看列名
df2.T #转置操作
df2.sort_values(by='age') # 按 age 升序排列 默认是升序.ascending=False
df3 = df2.copy() # 生成 DataFrame 副本,方便数据集被多个不同流程使用
string.str.lower() #将string中的字母全部转换为小写 upper为大写
left = pd.DataFrame({'key': ['foo1', 'foo2'], 'one': [1, 2]})
right = pd.DataFrame({'key': ['foo2', 'foo3'], 'two': [4, 5]})
print(left)
print(right)
>> key one
0 foo1 1
1 foo2 2
key two
0 foo2 4
1 foo3 5
# 按照 key 列对齐连接,只存在 foo2 相同,所以最后变成一行
pd.merge(left, right, on='key') #向相同值的部分靠拢
>>
key one two
0 foo2 2 4
进阶操作
索引的相关操作
dti = pd.date_range(start="2018-01-01",end='2018-12-13',freq='D') #freq参数还有M,H,S
s = pd.Series(np.random.rand(len(dti)),index=dti)
>>
2018-01-01 0.743871
2018-01-02 0.328453
2018-01-03 0.345250
2018-01-04 0.550854
2018-01-05 0.149763
s[s.index.weekday == 2].sum() # 统计s 中每一个周三对应值的和:
s = pd.date_range('today', periods=1, freq='D') # 获取当前时间
ts = pd.Series(np.random.randn(len(s)), s) # 随机数值
ts_utc = ts.tz_localize('UTC') # 转换为 UTC 时间
ts_utc.tz_convert('Asia/Shanghai') #转换为上海的时间
*设置多行索引*
letters = ['A', 'B', 'C']
numbers = list(range(10))
mi = pd.MultiIndex.from_product([letters, numbers]) # 设置多重索引
s = pd.Series(np.random.rand(30), index=mi) # 随机数
设置索引
描述性统计
df.describe(include=['object', 'bool']) #inclued 可以指定非数值类型的数据进行统计
判断特定的字符
排序
替换
将多个表用列表的形式合并
找出最大值所在的列
每一列减特定的值
按某个特定方法分组后找到最大的值做相加
**透视表:**分析庞大的数据时,为了更好的发掘数据特征之间的关系,可以使用透视表。
数据类型:在数据形式上主要包括数量型和性质型,数量型表示范围可变,性质型表示不可变。
绝对类型就是一种性质性数据类型。
缺失值的处理方法
interpolate():是根据数据本身存在的规律来插入数值。这里数值之间相差10
数据的拆分、这样后面就不要再愚蠢的去循环遍历了
举一反三:
取年月数据
将原来的数据删除,加入处理后的数据
数据的标准化:将字符串的第一个字母改为大写,其他均为小写
处理掉数据中存在其他字符的情况
处理区间数据
不存在的数据用NaN来代替
数据去重
归一化
有时候,DataFrame 中不同列之间的数据差距太大,需要对其进行归一化处理
def normalization(df):
numerator = df.sub(df.min()) #每一个元素减去最小值 (分母) x-x_min
denominator = (df.max()).sub(df.min()) #最大值-最小值 (分子) x_max-x_min
Y = numerator.div(denominator)
return Y
df = pd.DataFrame(np.random.random(size=(5, 3)))
print(df)
normalization(df)
作图
alist=[]
data[data["name"].isin(alist)] #可以显示出列表中所含有的数据,输出dataframe
result = data["name"].str.contains("str") #返回布尔值,我常用在dataframe的筛选
result=pd.concat([df1,df2],axis=0) #横向拼接
crosstab的用法: