我有一个数据框,其中大多数列都是varchar/object类型。列的长度差异很大,可以在3-1000+的范围内任意变化。现在,对于每一列,我想测量最大长度。
我知道如何计算列的最大长度。如果它是varchar,则:
max(df.char_col.apply(len))
如果它是数字(float8或int64),那么:
max(df.num_col.map(str).apply(len))
但是我的数据框有数百列,我想同时计算所有列的最大长度。问题在于,这些列有不同的数据类型,我不知道如何一次性处理它们。
因此,问题1:如何获取数据框中每个列的最大列长度
现在我正在尝试仅针对varchar/object类型列使用以下代码进行计算:
xx = df.select_dtypes(include = ['object'])
for col in [xx.columns.values]:
maxlength = [max(xx.col.apply(len))]
我只选择了对象类型的列并尝试编写for循环。但它不起作用。可能在for循环中使用apply()不是一个好主意。
问题2:如何仅获取每个对象类型列的最大长度
样本数据框:
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