pandas 数据处理

1.  读文件

1.1 读csv文件

# tsv文件与csv文件相似,分隔符是‘\t’
# 使用round() 确定数据保留几位小数
df = pd.read_csv('data.tsv', sep='\t').round(decimals=4)
# df = pd.read_csv(file_path, sep="\t", encoding='utf-8', error_bad_lines=False, keep_default_na=False)
# 读入时指定字段数据类型
df = pd.read_csv('test.csv', dtype={'a': int, 'b': float, 'c': D.Decimal, 'd': D.Decimal})
# df = pd.read_csv('test.csv', dtype=str)  # 可避免长整形变成科学记数法

# engine默认是c,设置为python可避免编码错误问题
df = pd.read_csv('data.tsv', engine='python', header=None)

文件表头问题

# 若文件没有表头,可在读取时加上表头
df = pd.read_csv('tt.csv', names=['user_id', 'msg'])

# 若果使用下面的方式会丢失掉第一行(误把第一行作为旧表头)
df = pd.read_csv('tt.csv')
df.columns = ['user_id', 'msg']

# 若文件有表头
df = pd.read_csv('tt.csv', header=0, names=['user_id', 'msg'])
print(df.shape[0])

1.2 读excel文件

df = pd.read_excel('test.xlsx', sheet_name=excel_sheet_name)

 1.3 读txt文件

df =pd.read_table('11.txt', sep='\t', header=None)

2. 元数据信息查看

# 查看前n条数据
print(df.head(n))
# 查看数据描述
print(df.describe())
# 查看字段类型
print(df.dtypes)
# 查看表头字段
print(df.columns)
# 将表头字段转化为数组
df.columns.tolist()
print('*' * 10, '数据总量:', df.shape[0], ' 特征数量:', df.shape[1])

3. 数据预处理

3.1 数据去空

data = df.dropna(how='all')
# data =df.dropna(axis=0, how='any', subset=['col1', 'col2'])
# 删除空值列
data = df.df(how='all', axis=1)
# 空值补0
data.fillna(0, inplace=True)

3.2 特殊值替换

df.replace({'good':0,'bad':1},inplace=True)

4. 数据打散与采样

4.1 数据打散

# shuffle
data = data.sample(frac=1, random_state=1024)

4.2 数据采样

data = data.sample(frac=0.8, random_state=1024)
data = data.sample(n=100, replace=False, random_state=None, axis=0)

按某一类别采样

# 假设fea_name有多个取值,现对fea_name=1的样本赋予一个[0-1]之间的随机值,显现采样
def fun1(fea_name):
    score = 1  # 其余值赋值为1
    if fea_name == 1:
        score = round(random.uniform(0, 1.0), 2)
    return score

def fun2(fea_name):
    score = 1
    if fea_name == 2:
        score = round(random.uniform(0, 1.0), 2)
    return score

data.insert(0, "prob1", data["fea_name"].map(lambda x: fun1(x)))
# 随机采样1-0.7=30%的样本
data = data.loc[data['prob1'] >= 0.7]
# 对fea_name=2,随机采样1-0.13=87%的样本
data.insert(0, "prob2", data["fea_name"].map(lambda x: fun2(x)))
data = data.loc[data['prob2'] >= 0.13]

5. 数据切分

# 将数据按照时间先后顺序分成5组
df = df.sort_values(by='dt', ascending=False)
df['rank'] = [i for i in range(df.shape[0])]  # 增加排序索引
# 根据索引,切分为5组
df['rank'] = pd.cut(df['rank'], bins=5, labels=[i for i in range(5)])
# 查看分组后,每组的数据量
df['rank'].value_counts()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值