获取pandas数据框列中值的长度

9
我要获取下面提到的数据框中每个zipCd值的长度。当我运行下面的代码时,每条记录都返回958。我期望得到类似于“4”的结果。有人能看出问题在哪里吗?
Code:
zipDfCopy['zipCd'].str.len()

Data:
print zipDfCopy[1:5]

   Zip Code  Place Name          State State Abbreviation     County  \
1       544  Holtsville       New York                 NY    Suffolk   
2      1001      Agawam  Massachusetts                 MA    Hampden   
3      1002     Amherst  Massachusetts                 MA  Hampshire   
4      1003     Amherst  Massachusetts                 MA  Hampshire   

   Latitude  Longitude                                              zipCd  
1   40.8154   -73.0451  0          501\n1          544\n2         1001...  
2   42.0702   -72.6227  0          501\n1          544\n2         1001...  
3   42.3671   -72.4646  0          501\n1          544\n2         1001...  
4   42.3919   -72.5248  0          501\n1          544\n2         1001...  

你正在对列“zipCd”运行此操作,它看起来具有值“1001...”,这意味着字符串的长度远大于4。这些省略号意味着该字符串比列的宽度更长,Pandas在那里放置了省略号而不是显示整个字符串。要么你使用了错误的列,要么你的数据出了问题。 - piRSquared
1个回答

20
一种方法是将其转换为字符串,然后使用带有内置 lenpd.Series.mappd.Series.str 用于矢量化字符串函数,而pd.Series.astype 用于更改列类型。
import pandas as pd

df = pd.DataFrame({'ZipCode': [341, 4624, 536, 123, 462, 4642]})

df['ZipLen'] = df['ZipCode'].astype(str).map(len)

#    ZipCode  ZipLen
# 0      341       3
# 1     4624       4
# 2      536       3
# 3      123       3
# 4      462       3
# 5     4642       4

一个更明确的选择是使用np.log10

df['ZipLen'] = np.floor(np.log10(df['ZipCode'].values)).astype(int) + 1

谢谢您的快速回复。当我尝试使用astype时,它仍然为每个记录给出了958。但是这个方法可以正确地工作:zipDfCopy['Zip Code'].apply(str).map(len)。 - modLmakur
好的,这很奇怪 - 如果您想将整数列转换为字符串,则df[col].astype(str)肯定有效,因此可能存在数据类型问题。 - jpp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接