[英]How to find a character in a (cell) array of strings, Python
我正在用 Pandas (pd.read_csv) 加載 .csv。 通常這會產生浮點數,但是我的一些數據集在 .csv 文件中包含的一些 > 100000 數字(例如 33x60000 的矩陣)中有一個“q”。 像這樣:'-13q27.20148186934421000000'(q 並不總是在同一個地方)。 這導致 Pandas 將它們視為字符串而不是數字。 這使得無法轉換為浮點數,因此我的問題是:如何輕松找到“q”並刪除它們?
我嘗試使用 for 循環並檢查每個單獨的字符串是否包含“q”,但這需要很長時間:
for i in range(tmp.values.shape[0]):
for j in range(tmp.values.shape[1]):
if 'q' in tmp.values[i,j]:
print('oh oh')
有時也有可能是另一個字母然后是“q”,所以通常尋找字母可能是明智的,我不知道如何以有效的方式做到這一點。
在此先感謝您的幫助!
使用pandas.DataFrame.replace
和regex=True
:
給定df
:
col1 col2 col3
0 1.1 2.2 3.3
1 2q.2 3.q4 q5.3
2 4.4 5.5 6.6
df = df.replace('q', '', regex=True).astype(float)
print(df.dtypes)
print(df)
輸出:
col1 float64
col2 float64
col3 float64
dtype: object
col1 col2 col3
0 1.1 2.2 3.3
1 2.2 3.4 5.3
2 4.4 5.5 6.6
您可以從特定列(此處命名為結果)中刪除所有字符(此處為 q):
data['result'] = data['result'].map(lambda x: x.lstrip('q').rstrip('q'))
之后您可以將您的列轉換為浮動。
data['result'] = data['result'].astype(float)
或替代:
df['result'] = df['result'].str.replace(r'\D', '').astype(float)
df.replace(['q'], 0.0, inplace=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.