在以下pandas数据帧中:
df =
contig pos ref haplotype_block hap_X hap_Y odds_ratio My_hap Sp_hap
2 2969 C 3706 T C 0.013000000000000001 C T
2 3222 G 3706 G C - C G
2 3416 G 3706 A G - G A
2 5207 T 1856 T A 167.922 T A
2 5238 G 1856 C G - C G
2 5398 A 1856 A G - A G
2 5403 A 1856 A G - A G
2 5426 C 1856 C A - C A
我希望舍入odds_ratio
列中的值。但是,该列中的一些数据是字符串。所以我尝试使用lambda
df['odds_ratio'] = df['odds_ratio'].astype(float).round(3)
但是,我收到的错误消息是某些值(-
)是字符串。
答案 0 :(得分:3)
使用to_numeric
和fillna
pd.to_numeric(df.odds_ratio, 'coerce').round(2).fillna(df.odds_ratio)
0 0.01
1 -
2 -
3 167.92
4 -
5 -
6 -
7 -
Name: odds_ratio, dtype: object
将其分配回来
df.assign(
odds_ratio=
pd.to_numeric(df.odds_ratio, 'coerce').round(4).fillna(df.odds_ratio)
)
contig pos ref haplotype_block hap_X hap_Y odds_ratio My_hap Sp_hap
0 2 2969 C 3706 T C 0.013 C T
1 2 3222 G 3706 G C - C G
2 2 3416 G 3706 A G - G A
3 2 5207 T 1856 T A 167.922 T A
4 2 5238 G 1856 C G - C G
5 2 5398 A 1856 A G - A G
6 2 5403 A 1856 A G - A G
7 2 5426 C 1856 C A - C A
答案 1 :(得分:0)
我花了一些时间才找到一个简单易用的内存效率解决方案:
df =
contig pos ref haplotype_block hap_X hap_Y odds_ratio My_hap Sp_hap
2 2969 C 3706 T C 0.013000000000000001 C T
2 3222 G 3706 G C - C G
2 3416 G 3706 A G - G A
2 5207 T 1856 T A 167.922 T A
2 5238 G 1856 C G - C G
2 5398 A 1856 A G - A G
2 5403 A 1856 A G - A G
2 5426 C 1856 C A - C A
<强>解决方案:强>
df['log_odds_ratio'] = df['log_odds_ratio'].apply(lambda x: round(x, 3) if type(x) is float else x)
print(df)
contig pos ref haplotype_block hap_X hap_Y odds_ratio My_hap Sp_hap
2 2969 C 3706 T C 0.013 C T
2 3222 G 3706 G C - C G
2 3416 G 3706 A G - G A
2 5207 T 1856 T A 167.922 T A
2 5238 G 1856 C G - C G
2 5398 A 1856 A G - A G
2 5403 A 1856 A G - A G
2 5426 C 1856 C A - C A