在两台不同机器上使用两种不同的 Python 安装提取 csv 文件时,我收到不同的行为。我怀疑问题出在 Pandas 版本的差异上,但我想它可能出在 Python 安装的其他地方。
Pandas v1.0.1 将始终按预期解析输入日期/时间字段。数据帧始终返回“datetime64[ns, pytz.FixedOffset(-480)]”的数据类型。在 Pandas v2.0.3 安装中,完全相同的数据集有时会返回“datetime64[ns, UTC-08:00]”,但更常见的是返回“object”。然后它会抛出错误“只能使用带有日期时间值的 .dt 访问器”。
显然,幕后发生了一些变化。虽然我可以通过在旧安装上运行来实现我的目标,但我想现代化到当前版本。 v2.0.3 输出的不可预测性阻碍了我。
这是我认为相关的代码。
注意: 之前的程序员故意将数据类型定义为 str,因为我认为日期会出现乱码。那是使用以前的不同的非 CSV 文件格式。我不确定我是否仍然需要这个,但注释掉它似乎没有什么区别。如果我没记错的话,那就是我所有的调试失败。
# Force read_csv to interpret everything as text, so it doesn't re-format any numbers (e.g., DateTime)
data_types = {
'DateTime': str,
'Temperature(F)': str,
'RelativeHumidity(%)': str,
'Precipitation(in)': str,
'WindSpeed(mph)': str,
'WindAzimuth(degrees)': str,
'SolarRadiation(W/m2)': str,
'SnowFlag': str,
'GustSpeed(mph)': str,
'GustAzimuth(degrees)': str,
' Temperature(F)': str,
' RelativeHumidity(%)': str,
' Precipitation(in)': str,
' WindSpeed(mph)': str,
' WindAzimuth(degrees)': str,
' SolarRadiation(W/m2)': str,
' SnowFlag': str,
' GustSpeed(mph)': str,
' GustAzimuth(degrees)': str,
'Tflag': str,
'RHflag': str,
'PCPflag': str,
'WSflag': str,
'WAflag': str,
'SRflag': str,
'GSflag': str,
'GAflag': str,
}
processed = 0 # Track how many files are processed
# list to store only .fw21 files
files = []
# Iterate directory
for file in os.listdir(fw21_dir):
# check only fw21 files
if file.endswith('.fw21'):
files.append(file)
print(f"{len(files)} .fw21 files found.")
for f in files:
print(f"processing {f}")
outname = f.replace('.fw21', '_REFORMATTED.csv')
outfile = os.path.join(out_dir, outname)
# Read input file into Pandas dataframe
fw21_data = pd.read_csv(os.path.join(fw21_dir, f), parse_dates=['DateTime'], dtype = data_types)
print(fw21_data.dtypes)
当 v2.0.3 抛出错误时,这是有问题的行:
fw21_data = pd.read_csv(os.path.join(fw21_dir, f), parse_dates=['DateTime'], dtype = data_types)
这是错误:
文件 ~\AppData\Local\Programs\Spyder\pkgs\panda