对于 Pandas 1.5.0+,有一个简单的方法可以做到这一点。如果您使用defaultdict
而不是正常的dict
为了dtype
参数中,字典中未明确列出的任何列都将使用默认值作为其类型。例如。
from collections import defaultdict
types = defaultdict(str, A="int", B="float")
df = pd.read_csv("/path/to/file.csv", dtype=types, keep_default_na=False)
(我还没有测试过这个,但我认为你仍然需要keep_default_na=False
)
对于旧版本的 Pandas:
您可以将整个 csv 作为字符串读取,然后将所需的列转换为其他类型,如下所示:
df = pd.read_csv('/path/to/file.csv', dtype=str, keep_default_na=False)
# example df; yours will be from pd.read_csv() above
df = pd.DataFrame({'A': ['1', '3', '5'], 'B': ['2', '4', '6'], 'C': ['x', 'y', 'z']})
types_dict = {'A': int, 'B': float}
for col, col_type in types_dict.items():
df[col] = df[col].astype(col_type)
keep_default_na=False
如果某些列是空字符串或类似的内容,则这是必要的NA
pandas 转换为NA
类型的float
默认情况下,这将使您最终得到混合数据类型str
/float
另一种方法是,如果您确实想在读入文件时为所有列指定正确的类型,并且之后不更改它们:仅读入列名(无行),然后使用它们来填充哪些列应该是字符串
col_names = pd.read_csv('file.csv', nrows=0).columns
types_dict = {'A': int, 'B': float}
types_dict.update({col: str for col in col_names if col not in types_dict})
pd.read_csv('file.csv', dtype=types_dict)