如何在不改变pandas原始数据类型的情况下读取csv

TjS*_*TjS 6 python dataframe pandas

我正在读取 csv,我不希望列的数据类型作为对象,它们应该是 int、float、str 等。

data = pd.read_csv(file_path+files, delimiter='\t', error_bad_lines=False)

data.dtypes:
  Time       object
  Code        int64
  Address     object
  dtype: object
Run Code Online (Sandbox Code Playgroud)

有什么方法可以让我们在读取时读取原始数据类型(因为它们来自 csv):

预期的:

data.dtypes:
  Time        int
  Code        int64
  Address     str
Run Code Online (Sandbox Code Playgroud)

我有一个数据框,如下所示:

df:
    A     B    C
    abc   10   20
    def   30   50  
    cfg   90   60
    pqr   str  50
    xyz   75   56
Run Code Online (Sandbox Code Playgroud)

我想删除“B”列不是“int”的行。由于 B 的 dtype 设置为“对象”,我无法这样做。

Ale*_*lex 5

您可以将dtypekwarg提供给read_csv()。来自文档:

\n
\n

dtype :类型名称或列的字典 -> 类型,默认 None

\n

数据或列的数据类型。例如 {\xe2\x80\x98a\xe2\x80\x99: np.float64, \xe2\x80\x98b\xe2\x80\x99: np.int32} 将 str 或 object 与合适的 na_values 设置一起使用来保留而不是解释数据类型。如果指定了转换器,则将应用它们而不是数据类型转换。

\n
\n

例如

\n
data = pd.read_csv(..., dtype={'Time': np.int64})\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:正如@ALollz 指出的那样,如果指定列中的数据无法转换,这将会中断。如果您想使用不同位数读入数据(例如np.int32代替np.int64),通常会使用它。

\n

您可以df['Time'].astype(int)在 DataFrame 上使用ojbects 来诊断哪些数据导致转换问题。

\n

  • 但问题是,如果“.read_csv”尚未将该列解析为数字,那么该列中几乎肯定存在非数字值。指定数字“dtype”将使您无法一起解析文件。 (2认同)
  • @tejasshah 已经这样做了。如果推断不正确,您应该查看类型不正确的数据。您可以使用“df['Time'].astype(int)”来诊断问题。 (2认同)