gpt4 book ai didi

python - 如何使用pandas python获取数据框中每列的最大长度

转载 作者:行者123 更新时间:2023-12-04 16:28:29 29 4
gpt4 key购买 nike

我有一个数据框,其中大部分列都是 varchar/object 类型。列的长度变化很大,可以是 3 - 1000+ 范围内的任何值。现在,对于每一列,我想测量最大长度。

我知道如何计算 col 的最大长度。如果它的 varchar 则:

max(df.char_col.apply(len))

如果它的数字(float8 或 int64)那么:
max(df.num_col.map(str).apply(len))

但是我的数据框有数百列,我想同时计算所有列的最大长度。问题是,有不同的数据类型,我不知道如何一次完成。

So Question 1: How to get maximum column length for each columns in the data frame



现在我正在尝试使用以下代码仅对 varchar/object 类型列执行此操作:
xx = df.select_dtypes(include = ['object'])
for col in [xx.columns.values]:
maxlength = [max(xx.col.apply(len))]

我只选择了对象类型列并尝试编写一个 for 循环。但它不起作用。可能在 for 循环中使用 apply() 不是一个好主意。

Question 2: How to get maximum length of each column for only object type columns



示例数据框:
d1 = {'name': ['john', 'tom', 'bob', 'rock', 'jimy'], 'DoB': ['01/02/2010', '01/02/2012', '11/22/2014', '11/22/2014', '09/25/2016'], 'Address': ['NY', 'NJ', 'PA', 'NY', 'CA'], 'comment1': ['Very good performance', 'N/A', 'Need to work hard', 'No Comment', 'Not satisfactory'], 'comment2': ['good', 'Meets Expectation', 'N', 'N/A', 'Incompetence']}
df1 = pd.DataFrame(data = d1)
df1['month'] = pd.DatetimeIndex(df1['DoB']).month
df1['year'] = pd.DatetimeIndex(df1['DoB']).year

最佳答案

一种解决方案是使用 numpy.vectorize .这可能比 pandas 更有效率基于的解决方案。

您可以使用 pd.DataFrame.select_dtypes 选择 object列。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['abc', 'de', 'abcd'],
'B': ['a', 'abcde', 'abc'],
'C': [1, 2.5, 1.5]})

measurer = np.vectorize(len)

所有列的最大长度
res1 = measurer(df.values.astype(str)).max(axis=0)

array([4, 5, 3])

对象列的最大长度
res2 = measurer(df.select_dtypes(include=[object]).values.astype(str)).max(axis=0)

array([4, 5])

或者,如果您需要将输出作为字典:
res1 = dict(zip(df, measurer(df.values.astype(str)).max(axis=0)))

{'A': 4, 'B': 5, 'C': 3}

df_object = df.select_dtypes(include=[object])
res2 = dict(zip(df_object, measurer(df_object.values.astype(str)).max(axis=0)))

{'A': 4, 'B': 5}

关于python - 如何使用pandas python获取数据框中每列的最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50339065/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com