2016-07-09 3 views
5

이것은 본질적으로 단순한 작업처럼 보이지만, 전체 데이터 프레임에서 ''을 제거하고 가지고 있지 않은 숫자를 포함하여 각 열의 숫자 값을 반환하는 것은 매우 어렵습니다. ''. dateframe 더 수백 개의 컬럼을 포함하고 짧은 다음과 같습니다 : 나는 안양의 모든 열을 반복하도록 작성 아직하지만하지 않은팬더 데이터 프레임의 특수 문자 제거

Time   A1  A2 
2.0002546296 1499 1592 
2.0006712963 1252 1459 
2.0902546296 1731 2223 
2.0906828704 1691 1904 
2.1742245370 2364 3121 
2.1764699074 2096 1942 
2.7654050926 *7639* *8196* 
2.7658564815 *7088* *7542* 
2.9048958333 *8736* *8459* 
2.9053125000 *7778* *7704* 
2.9807175926 *6612* *6593* 
3.0585763889 *8520* *9122* 

까지 첫 번째 열이 나는이

때우기 간다

0  NaN 
1  NaN 
2  NaN 
3  NaN 
4  NaN 
5  NaN 
6  NaN 
7  NaN 
8  NaN 
9  NaN 
10  NaN 
11  NaN 
12  NaN 
13  NaN 
14  NaN 
15  NaN 
16  NaN 
17  NaN 
18  NaN 
19 7639.0 
20 7088.0 
21 8736.0 
22 7778.0 
23 6612.0 
24 8520.0 

를 산출

df['A1'].str.replace('*','').astype(float) 

은 팬더의 dataframe에서 '*'제거하는 아주 쉬운 방법이 있습니까? 전체 dataframe에 적용

답변

7

사용 replace는 :

df 
Out[14]: 
     Time  A1  A2 
0 2.000255 1499 1592 
1 2.176470 2096 1942 
2 2.765405 *7639* *8196* 
3 2.765856 *7088* *7542* 
4 2.904896 *8736* *8459* 
5 2.905312 *7778* *7704* 
6 2.980718 *6612* *6593* 
7 3.058576 *8520* *9122* 

df=df.replace('\*','',regex=True).astype(float) 

df 
Out[16]: 
     Time A1 A2 
0 2.000255 1499 1592 
1 2.176470 2096 1942 
2 2.765405 7639 8196 
3 2.765856 7088 7542 
4 2.904896 8736 8459 
5 2.905312 7778 7704 
6 2.980718 6612 6593 
7 3.058576 8520 9122 
+2

대체 후 'df = df.astype (float)'을 추가하면됩니다. 나는'inplace'를 건너 뛰고'df = df.replace ('\ *', '', regex = True) .astype (float)'을 호출하고 그것을 좋은 것으로 부릅니다. – piRSquared

+0

@piRSquared는'inplace'를 사용하는 것은 나쁜 습관입니다. – shivsn

+0

아니요. 이 경우에, 당신은 inplace를 사용했을 때 chaining을 허용하지 않습니다. 그것 없이는, 나는 astype (float) – piRSquared

0

지도 및 스트립 기능을 사용하는 다른 솔루션이있다. 당신은 아래 링크를 볼 수 있습니다 구문 분석 절차는 원하는 컬럼에 적용 할 수 Pandas DataFrame: remove unwanted parts from strings in a column.

df = 
    Time  A1  A2 
0 2.0  1258 *1364* 
1 2.1  *1254* 2002 
2 2.2  1520 3364 
3 2.3  *300* *10056* 

cols = ['A1', 'A2'] 
for col in cols: 
    df[col] = df[col].map(lambda x: str(x).lstrip('*').rstrip('*')).astype(float) 

df = 
    Time  A1  A2 
0 2.0  1258 1364 
1 2.1  1254 2002 
2 2.2  1520 3364 
3 2.3  300  10056 

합니다.