dataframe常用技巧

1、os小结

os.getcwd()函数 #获得当前的路径

os.path.sep: #路径分隔符 (相当于就是‘/’的作用)

os.path.join(os.getcwd(),‘aaa’, ‘bbb’, ‘ccc’) 拼接出来多级目录:E:\test\aaa\bbb\ccc

os.path.abspath(path) #返回绝对路径

os.path.basename(path) #返回文件名

path =  os.path.abspath(os.getcwd())   # 获取当前路径
input_path = path+'/data/'             # 获取文件路径
featureName = ['carid', 'pushDate', 'pushPrice', 'updatePriceTimeJson', 'pullDate', 'withdrawDate']
Train_data = pd.read_csv(os.path.join(input_path,'附件4:门店交易训练数据.txt'), sep='\t', names=featureName)

2、取整函数,近似函数

a=3.4
# 向下取整
b=int(a) #法1,b=3
import math
b=math.floor(a) #法2,b=3
# 向上取整
c=math.ceil(a) # c=4

# 四舍五入近似
df['car_age_year'] = round(df['car_age_day'] , 1) # 指的是在四舍五入到1位
df['car_age_year'] = df['car_age_day'].round(decimals=1) # 指的是在四舍五入到1位

3、处理目标值长尾分布

#处理目标值长尾分布的问题
Train_data['carid'] = np.log1p(Train_data['carid']) # 取log
Train_data['carid'] = np.expm1(Train_data['carid']) # 用e还原

# 合并方便后面的操作
df = pd.concat([Train_data, Test_data], ignore_index=True)

4、dataframe中的transform

df.groupby('order')['ext price'].sum()

"""
order	
10001     576.12	
10005    8185.49	
10006    3724.49	
Name: ext price, dtype: float64
"""

df.groupby('order')['ext price'].transform('sum') 

"""
0      576.12	
1      576.12	
2      576.12	
3     8185.49	
4     8185.49	
5     8185.49	
6     8185.49	
7     8185.49	
8     3724.49	
9     3724.49	
10    3724.49	
11    3724.49	
Name: ext price, dtype: float64
"""

5、dataframe日期数据处理

data['withdrawDate'] = pd.to_datetime(data['withdrawDate'], format='%Y/%m/%d')
#  构造日期和月份特征
data['pushDateMonth'] = data['pushDate'].dt.month
data['pushDateYear'] = data['pushDate'].dt.year
df['regDate_day'] = df['regDate'].dt.day
df['car_age_day'] = (df['creatDate'] - df['regDate']).dt.day

6、pandas apply() 函数用法

pandas 的 apply() 函数可以作用于 Series 或者整个 DataFrame,功能也是自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。

6.1、Series.apply()

df['ExtraScore'] = df['Nationality'].apply(lambda x : 5 if x != '汉' else 0) # 如果df['Nationality']不是汉族,对应位置为5,否则为0
df['NameLength'] = df['Name'].apply(len) # df['Name']的长度为

6.2、lambda 函数

lambda x, y: x*y			# 函数输入是x和y,输出是它们的积x*y

6.3、DataFrame.apply()

df.apply(np.square)   #整个df都做乘法运算

7、dataframe属性

carid = df['carid'].values.tolist() # 转换为list式

values = df['carid'].values # 得到列表内容
index = df['carid'].index # 得到列表行索引
columns = df['carid'].columns # 得到列表列索引
shape = df['carid'].shape # 得到列表形状
dtype = df['carid'].dtype # 得到列表类型

8、astype函数用于array中数值类型转换

# 适用于numpy,转换数据类型
x = np.array([1, 2, 2.5])
x1=x.astype(int)

9、dataframe分析相关性

import pandas as pd

featureName = ['carid', 'pushDate', 'pushPrice', 'updatePriceTimeJson', 'pullDate', 'withdrawDate']
datanew = pd.read_csv(path+'附件4:门店交易训练数据.txt',sep='\t', names=featureName)

#  分析相关性
cor=datanew.corr(method='spearman')   # 相关性

pd.DataFrame(datanew.corr(method='spearman')).round(decimals=3) # round函数是4舍5入,decimals指的是在四舍五入到3位,即0.01245-》0.012

10、item()的用法

作用:取出单元素张量的元素值并返回该值(保持原元素类型不变)
即:原张量元素为整形,则返回整形,原张量元素为浮点型则返回浮点型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的DataFrame行列转换可以使用transpose()函数实现。该函数可以将DataFrame的行和列进行转置,即行变成列,列变成行。例如,如果有一个DataFrame df,可以使用df.transpose()将其行列进行转换。 ### 回答2: Python中使用pandas库的DataFrame可以很方便地将数据整理成表格形式,支持对表格进行多种操作。其中,行列转换是一种非常重要的操作,它可以根据不同的业务需要来重新组织数据,使得数据的结构更加适合进行分析和处理。 首先,让我们来看一下如何将DataFrame的行转换成列,即实现数据的透视(Pivot)操作。在pandas中,可以使用pivot()方法来实现该功能。首先,需要指定一个列作为索引(index),另外指定一个或多个列作为新表格的列,还需要指定一个或多个列的值作为新表格对应的值。 例如,假设我们有一个DataFrame,包含学生姓名、科目和成绩信息: ```python import pandas as pd data = {'姓名': ['小明', '小红', '小明', '小红'], '科目': ['语文', '语文', '数学', '数学'], '成绩': [80, 90, 70, 95]} df = pd.DataFrame(data) ``` 现在,我们想要将其转换成如下的格式: | 姓名 | 语文 | 数学 | | ---- | ---- | ---- | | 小明 | 80 | 70 | | 小红 | 90 | 95 | 实现方法如下: ```python df_pivot = df.pivot(index='姓名', columns='科目', values='成绩') print(df_pivot) ``` 其中,index参数指定用“姓名”列作为新表格的索引,columns参数指定用“科目”列作为新表格的列,values参数指定用“成绩”列的值填充新表格。执行结果如下: ``` 科目 数学 语文 姓名 小明 70 80 小红 95 90 ``` 同样地,我们也可以使用melt()方法将DataFrame的列转换成行,即实现“反透视”操作。在此方法中,需要指定将哪个或哪些列转换成新表格的行,以及将哪个或什么值作为新表格的值。例如,对于上面的例子,我们可以将新表格设置为包含“姓名”、“科目”和“成绩”三列,其中“姓名”和“科目”为新表格的行,而“成绩”为新表格的值。 ```python df_melt = df.melt(id_vars=['姓名', '科目'], value_vars=['成绩'], var_name='维度', value_name='值') print(df_melt) ``` 其中,id_vars参数指定将“姓名”和“科目”列作为新表格的行,value_vars指定将“成绩”列作为新表格的值,“维度”和“值”则为新表格的列名。执行结果如下: ``` 姓名 科目 维度 值 0 小明 语文 成绩 80 1 小红 语文 成绩 90 2 小明 数学 成绩 70 3 小红 数学 成绩 95 ``` 以上就是Python DataFrame行列转换的方法。透视和反透视操作是非常常用的数据整理技巧,它可以帮助我们对数据进行有效的分析和可视化,是数据科学领域中不可或缺的一环。 ### 回答3: 在Python中,数据处理常常需要使用pandas库中的DataFrame数据结构。在实际操作中,我们经常需要对DataFrame的结构进行转换,比如将行列互换,这在处理数据时非常常见。以下是通过python实现DataFrame行列转换的几种不同方式: 1. transpose方法:pandas.DataFrame.transpose()方法可以将行列转置,即行变为列,列变为行。例如,假设一个DataFrame df,它有三列和四行。要把它转换为4列和3行,则可以使用以下代码:df.transpose() 2. 索引与列名转置:这种方法可以通过使用DataFrame中的columns和index属性来实现。例如,可以将DataFrame df中的所有列名作为新的行名指定,将原来的行名作为列名指定。代码如下: ``` df = pd.DataFrame({‘one’ : [1., 2., 3., 4.],‘two’ : [4., 3., 2., 1.]}) df_new = pd.DataFrame(df.values.T, index=df.columns, columns=df.index) ``` 3. stack()和unstack()方法:stack()方法将DataFrame中列的标签转化为行的标签,而unstack()方法则将行标签转化为列标签。例如,假设DataFrame df有多层行索引和列索引,要转换列索引为行索引,则可以使用下列代码: ``` df.stack().unstack(0) #将列索引转换为行索引 df.stack().unstack() #将最后一列的索引转换为列名 ``` 以上几种方法都可以实现Python DataFrame行列转换,不同的方法适用于不同的数据处理需求。在实际应用中,需要根据数据结构和需求选择最适合的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值