文章目录
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))