簡體   English   中英

從“熊貓”列中提取數字(對象dtype)

[英]Extract Digits from Pandas column (Object dtype)

我無法從df列中刪除非數字。 我嘗試了幾種方法,但是當函數通過列時,仍有相當多的方法產生NaN值。

我需要輸出只能是整數形式的數字(無前導零)

Cust #
0   10726
2   11699
5   12963
8   z13307
9   13405
12  14831-001
16  16416
17  16917
18  18027
24  19233z
dtype('O')

我努力了:

Unique_Stores['Cust #2']=Unique_Stores['Cust #2'].str.extract('(\d+)',expand=True)

Unique_Stores['Cust #2'].str.replace(r'(\D+)','')

Unique_Stores['Cust #2'].replace(to_replace="([0-9]+)", value=r"\1", regex=True, inplace=True)

Unique_Stores['Cust #2'] = pd.to_numeric(Unique_Stores['Cust #2'].str.replace(r'\D+', ''), errors='coerce')

預先謝謝您,如果需要更多信息,請告訴我。

但是,無論我做什么,前1000條左右的行都會返回NaN值-即使該值是整數也是如此。

鏈接到實際數據集

更新:

In [144]: df = pd.read_csv(r'D:\download\Customer_Numbers.csv', index_col=0)

In [145]: df['Cust #2'] = df['Cust #'].str.replace(r'\D+', '').astype(int)

In [146]: df
Out[146]:
      State Zip Code      Cust #  Cust #2
0        PA    16505       10726    10726
2        MI    48103       11699    11699
5        NH     3253       12963    12963
8        PA    18951       13307    13307
9        MA     2360       13405    13405
12       NY    11940       14831    14831
16       OH    44278       16416    16416
17       OH    45459       16917    16917
18       MA     1748       18027    18027
24       NY    14226       19233    19233
...     ...      ...         ...      ...
54393    WA    99207  005611-99    561199
54394    WA    99006        7775     7775
54395    WA    99353        8006     8006
54399    WA    99206        8888     8888
54404    CA    92117      444202   444202
54408    CA    90019       30066    30066
54411    CA    90026      443607   443607
54414    CA    90094        9242     9242
54417    CA    90405        9245     9245
54420    CA    90038        9247     9247

[6492 rows x 4 columns]

In [147]: df.dtypes
Out[147]:
State       object
Zip Code    object
Cust #      object
Cust #2      int32
dtype: object

舊答案:

In [123]: df
Out[123]:
          val
0       10726
2       11699
5       12963
8      z13307
9       13405
12  14831-001
16      16416
17      16917
18      18027
24     19233z

In [124]: df['val'] = pd.to_numeric(df['val'].str.replace(r'\D+', ''), errors='coerce')

In [125]: df
Out[125]:
         val
0      10726
2      11699
5      12963
8      13307
9      13405
12  14831001
16     16416
17     16917
18     18027
24     19233

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM