我有一个数据框,其中大多数列都是varchar/object类型。列的长度变化很大,可以是3-1000+范围内的任何值。现在,对于每一列,我想测量最大长度
我知道如何计算列的最大长度。如果是varchar,则:
最大值(df.char\u col.apply(len))
如果其编号为(float8或int64),则:
max(df.num\u col.map(str.apply(len))
但是我的dataframe有数百列,我想同时计算所有列的最大长度。问题是,有不同的数据类型,我不知道如何一次完成所有工作
问题1:如何为数据帧中的每列获取最大列长度
现在,我尝试使用以下代码仅对varchar/对象类型列执行此操作:
xx=df。选择数据类型(包括=['object'])
对于[xx.columns.values]on 列:
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 good good performance'、'N/A'、'需要努力工作'、'Now comments'、'Not successful'、'Comment[‘良好’、‘符合预期’、‘不适用’、‘不称职’]
df1=pd.DataFrame(数据=d1)
df1['month']=pd.DatetimeIndex(df1['DoB']].month
df1['year']=pd.DatetimeIndex(df1['DoB']).year
一种解决方案是使用numpy.vectorize。这可能比基于pandas的解决方案更有效
您可以使用pd.DataFrame。选择数据类型以选择对象列
将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame({'A':['abc','de','abcd'],
“B”:[“a”、“abcde”、“abc”],
‘C’:[1,2.5,1.5]})
测量器=np.矢量化(len)
所有列的最大长度
res1=measurer(df.values.astype(str)).max(axis=0)
数组([4,5,3])
对象列的最大长度
res2=measurer(df.select\u数据类型(include=[object]).values.astype(str)).max(axis=0)
数组([4,5])
或者,如果您需要输出为字典:
res1=dict(zip(测向,测量器(测向值,astype(str)).max(轴=0)))
{'A':4,'B':5,'C':3}
df\u object=df。选择\u数据类型(包括=[object])
res2=dict(zip(df_对象,measurer(df_对象.values.astype(str)).max(axis=0)))
{'A':4,'B':5}