我有一个CSV文件,当在记事本中打开时,它显示以下格式:

。如您所见,它只是一个包含2个值的1列文件,但是当将该文件作为df = pd.read_csv(f)读入熊猫时,实际文件中没有逗号,它将金额值视为字符串。由于我试图将这两个70个值转换为浮点数,所以我使用df['Amount'] = pd.to_numeric(df['Amount'])和df.to_excel(newfile, index = False),但是它返回一个空白的5kb excel文件。我将errors="ignore"添加到pd.to_numeric中,它将两个70个值作为字符串返回。当使用errors="coerce"时,它在控制台中返回NaN值。
我认为问题在于CSV文件本身的格式。虽然当原始文件在记事本中打开时,它在右下角显示为一个CRLF文件,但我相信它首先是一个Unix LF文件,并且使用Excel刚刚打开、保存和关闭,迫使从LF到CRLF的更改。如有任何指导,将不胜感激。
发布于 2021-06-29 16:48:04
我认为美元符号在转换为浮动时的问题:
import pandas as pd
df = pd.read_csv('data.txt')
pd.to_numeric(df['Amount'])ValueError:无法解析0位置的字符串"($70.00)“
在我去掉美元标志和方括号后,它对我起了作用。
df["Amount"] = df["Amount"].replace(regex={r'[$\)]': '', '[\(]': '-'}).astype(float)
print(df['Amount'])0 -70.0
1 70.0
名称:金额,dtype: float64
现在您可以将其写入excel文件。
发布于 2021-06-29 18:04:11
我知道哪里是负面的,然后调整后,事实。
>>> df = pd.read_csv(io.StringIO('Amount\n($70)\n$70'))
>>> df['is_negative'] = df['Amount'].str.match('\(\$?\d+(.\d+)?\)')
>>> raw_amount = pd.to_numeric(df['Amount'].str.replace(r'[\(\)\$]', '', regex=True)
>>> df['num'] = np.where(df['is_negative'], -1 * raw_amount, raw_amount)
>>> df
Amount num is_negative
0 ($70) -70 True
1 $70 70 Falsehttps://stackoverflow.com/questions/68182268
复制相似问题