具体来说,如果一个值用引号括起来(例如,'123'),它应该被视为字符串;如果没有引号(例如,123),它应该被视为数字格式。
import pandas as pd
# Creating a DataFrame with mixed data types
data = {'columns': [1, 2, 3, '4', '5', '6']}
df = pd.DataFrame.from_dict(data)
# Checking unique data types before saving to CSV
selected_column = 'columns'
unique_types_before = {selected_column: set(df[selected_column].apply(type))}
print(unique_types_before) # Output: {'columns': {<class 'int'>, <class 'str'>}}
# Saving DataFrame to CSV
df.to_csv('example.csv')
# Loading DataFrame from the saved CSV file
dataframe = pd.read_csv('example.csv')
# Checking unique data types after loading from CSV
unique_types_after = {selected_column: set(dataframe[selected_column].apply(type))}
print(unique_types_after) # Output: {'columns': {<class 'int'>}}
字符串
我遇到了一个问题,即在保存到CSV文件时,DataFrame中的数据类型没有正确保留。经过调查,我手动创建了一个名为“manual_example.csv”的CSV文件,其中包含以下内容:
columns
1
2
3
4
5
6
"7"
型
为了解决这个问题,我正在寻找如何将“manual_example.csv”加载到DataFrame中的指导,同时确保行中的数据类型得到正确解释。目标是将引号中的值(例如,“123”)视为字符串,而将没有引号的值(例如,123)视为数值格式。
以下是我到目前为止使用的代码:
import pandas as pd
from io import StringIO
# Replace 'example.csv' with the actual path to your CSV file
csv_file_path = 'manual_example.csv'
# Read the content of the CSV file
with open(csv_file_path, 'r', encoding='utf-8') as file:
csv_content = file.read()
# Use StringIO to create a file-like object
csv_file = StringIO(csv_content)
# Read CSV with appropriate data types
df1 = pd.read_csv(csv_file, quotechar='"', dtype={'columns': object})
unique_types_df1 = {selected_column: set(df1[selected_column].apply(type))}
print(unique_types_df1) # Output: {'columns': {<class 'str'>}}
型
我很感激任何关于如何在CSV文件加载过程中正确处理数据类型的见解或建议。
1条答案
按热度按时间l3zydbqr1#
pandas将在阅读csv文件时剥离
"
,因为这是正确取消转义文本所必需的(想想""5" was all he said!"
)。你可以使用converters
-(而不是dtypes
)参数来手动将CSV文本转换为各种对象,但您需要禁用报价处理,如果CSV文件的格式包含必须被引用的文本,则这可能导致问题。字符串