【问题标题】:Python Dataframe - Keep data as string while loading from_csv [duplicate]Python Dataframe - 在从_csv加载时将数据保留为字符串[重复]
【发布时间】:2017-07-27 21:55:30
【问题描述】:

from_csv 选择一个“04”作为值之一并将其转换为字符串。如何确保所有被拾取的列都是字符串?我想避免处理单个列,因为有 114 列,并且我不想在列受到影响时进行分析。

【问题讨论】:

  • CORRETION: 并将其转换为 INT
  • 不是真正的重复。从 csv 加载不是问题。问题是当你使用 from_csv 方法是 DataFrame
  • @PankajSingh 你可以edit你的问题包括更正...
  • pandas.pydata.org/pandas-docs/stable/generated/… dtype : Type name or dict of column -> type, default None Data type for data or columns. E.g. {‘a’: np.float64, ‘b’: np.int32} (Unsupported with engine=’python’). Use str or object to preserve and not interpret dtype. --> dtype=str
  • 你可以做df = pd.read_csv(your_filepath, dtype=str)

标签: python pandas dataframe import-from-csv


【解决方案1】:

如果您希望所有列都为str,则将dtype=str 传递给read_csv

df = pd.read_csv(file_path, dtype=str)

将保留所有前导零

例子:

In [54]:
t="""a,b
001,230
01,003"""
df = pd.read_csv(io.StringIO(t), dtype=str)
df

Out[54]:
     a    b
0  001  230
1   01  003

这里的数据类型将被列为object,这是str 的正确数据类型:

In [55]:
df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 2 columns):
a    2 non-null object
b    2 non-null object
dtypes: object(2)
memory usage: 112.0+ bytes

【讨论】:

    【解决方案2】:

    如果您只有有限数量的列可以作为字符串读取

    使用 read_csv (here the documentation) 代替 from_csv 并设置

    dtype={ 'your_column_name':np.str_ }
    

    如果所有的数据都应该被认为是一个字符串

    编辑:正如 cmets 中所指出的,建议的解决方案从数据中删除尾随零。 EdChum's answer 按要求处理这种情况。

    df.asType(np.str_)读取数据后转换即可。您还可以通过将所有名称放在一个列表中然后执行 df[list_of_column_names] = df[list_of_column_names].asType(np.str_)

    来转换一组列(尽管您仍然需要其中的名称)

    【讨论】:

    • 这正是我想要避免的。我有 114 列。以上建议将使其为 114 列设置数据类型
    • 查看更新的答案以获得更多选项以避免指定所有列名
    • 如果我错了,请纠正我,但如果在阅读后转换,则转换为 4 的 '04' 将变为 '4',这意味着信息可能会丢失。
    • 在这种情况下,删除尾随零,是的。
    猜你喜欢
    • 2021-11-19
    • 2017-07-14
    • 2021-04-30
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2017-04-04
    • 2021-11-06
    相关资源
    最近更新 更多