itertools.groupby分组

itertools.groupby分组

itertools.groupby(iterable, key=None) 是一个 Python 的内置函数,用于对可迭代对象中的连续项进行分组。它会将相邻的重复元素放在一起,并返回一个迭代器,每次迭代都生成一个包含键和对应组的元组。

1.用法

groupby(iterable[, key])

**iterable:**需要进行分组的可迭代对象。
**key(可选):**一个函数,用于计算每个元素的键值。如果未指定或为 None,则默认为恒等函数,返回未更改的元素。

from itertools import groupby  
  
data = 'AAABBBCCAAA'  
  
# 使用 groupby 进行分组  
for key, group in groupby(data):  
    print(key, list(group))
A ['A', 'A', 'A']  
B ['B', 'B', 'B']  
C ['C', 'C']  
A ['A', 'A', 'A']

2.进阶版

from itertools import groupby 

## addresslist分组
addresslist = ['高三\\1班\\语文.csv',
               '高三\\1班\\数学.csv',
               '高三\\2班\\语文.csv',
               '高三\\2班\\数学.csv']

foldlist = [i.rsplit('\\',1)[0] for i in addresslist]
addresslist = [[c for _,c in g] for _,g in groupby(zip(foldlist,addresslist),key = lambda x:x[0])]
[['高三\\1班\\语文.csv', '高三\\1班\\数学.csv'], 
['高三\\2班\\语文.csv', '高三\\2班\\数学.csv']]

select_dtypes 标题按数据类型选择列

select_dtypes方法允许你按数据类型选择列。它接受一个数据类型或数据类型列表作为参数,返回一个包含满足指定数据类型的列的DataFrame。
参数:
**include:**指定要包含的数据类型。可以是一个数据类型字符串(如’number’、‘object’、'datetime’等)或一个数据类型列表。
**exclude:**指定要排除的数据类型。可以是一个数据类型字符串或一个数据类型列表。

要更改DataFrame中列的类型,你可以使用astype()函数。例如,如果你有一个名为df的DataFrame,并且你想要将名为’column_name’的列从int64更改为float64,你可以使用以下代码:

df['column_name'] = df['column_name'].astype('float64')

可以使用dtypes属性来查看DataFrame中所有列的类型

print(df.dtypes)

完整版

def change_col_type(data):
    """
    改dataframe的列类型
    object改category
    int64:9nt32
    float64:float32
    """
    typedict={'object':'category','int64':'int32'}#,'float64':'float32'
    for key,value in typedict.items():
        middata=data.select_dtypes(include=[key])
        colnames=middata.columns
        for col in colnames:del data[col]
        data[colnames]=middata.astype(value)

标题memory_usage()函数:查看一个DataFrame占用的内存

查看一个DataFrame占用的内存,你可以使用memory_usage()函数

memory_usage = df.memory_usage(deep=True).sum()  
print(f"DataFrame占用内存: {memory_usage} bytes")

deep=True参数表示计算DataFrame中对象类型列的内存使用情况。然后,sum()函数将所有列的内存使用情况相加,得到DataFrame的总内存使用情况。

注意,memory_usage()函数返回的内存使用情况是以字节为单位的,你可能需要将其转换为更大的单位(如KB、MB或GB)以便更好地理解和比较。例如,要将字节转换为MB,你可以使用以下代码:

memory_usage_mb = df.memory_usage(deep=True).sum() / (1024**2)  
print(f"DataFrame占用内存: {memory_usage_mb} MB")

完整版

#查看一个dataframe下述格式的占用内存
def cal_memory_usage(data):
    for dtype in ['float32','int32','float64','int64','object','category']:
        selected_dtype = data.select_dtypes(include=[dtype])
        mean_usage_b = selected_dtype.memory_usage(deep=True).sum()#.mean()
        mean_usage_mb = mean_usage_b / 1024 ** 2
        print("Average memory usage for {} columns: {:03.2f} MB".format(dtype,mean_usage_mb))
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值