我有一个DataFrame,其中一列可能有三种值,整数(12331),整数作为字符串('345')或其他字符串('text')。
有没有办法从数据帧中删除包含最后一种字符串的所有行,并将第一种字符串转换为整数?或者至少有一些方法可以忽略导致类型错误的行,如果我正在对列进行求和。
这个数据框来自于读取一个非常大的CSV文件(25 GB),因此我想要一些在阅读块时可以使用的解决方案。
答案 0 :(得分:9)
Pandas有一些转换这些列的工具,但它们可能并不完全符合您的需求。 F={f3}
会转换与您类似的混合列,但会将非数字字符串转换为pd.to_numeric
。这意味着您将获得浮点列,而不是整数,因为只有浮点列可以具有NaN
值。这通常无关紧要,但要注意这一点很好。
NaN
如果您想删除所有df = pd.DataFrame({'mixed_types': [12331, '345', 'text']})
pd.to_numeric(df['mixed_types'], errors='coerce')
Out[7]:
0 12331.0
1 345.0
2 NaN
Name: mixed_types, dtype: float64
行:
NaN
答案 1 :(得分:1)
您可以将pd.to_numeric
与 - (UIFont *)fontforWidth:(CGFloat)width String:(NSString *)stringToFit {
CGFloat widthForIdealFontSize = [self widthForIdealFontSizeWithString:stringToFit];
CGFloat requiredFontSize = (KIdealFontSize/widthForIdealFontSize*width);
return [UIFont fontWithName:self.fontName size:(requiredFontSize)];
}
- (CGFloat)widthForIdealFontSizeWithString:(NSString *)inputString {
NSAttributedString *attrString = [[NSAttributedString alloc]initWithString:inputString attributes:@{NSFontAttributeName:[UIFont fontWithName:self.fontName size:KIdealFontSize]}];
CTLineRef line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)attrString);
CGFloat ascent, descent, leading;
CGFloat width = CTLineGetTypographicBounds(line, &ascent, &descent, &leading);
return width;
}
一起使用errors=coerce
替换非数值,并将其应用于每列。然后,您可以根据自己的喜好使用NaN
或dropna
。
fillna
答案 2 :(得分:0)
您可以直接使用df._get_numeric_data()。