因此,我正在使用Python进行入门课程,我需要执行以下操作:有一个CSV文件,其中有10列,填充了200行。每个值都有一个str
,int
或float
作为值。
示例输入:
id gender age marital location income intelliscore emotiscore
51 F 46 M 0 15100 531 555
52 M 29 M 2 14200 673 633
53 M 25 S 0 22200 742 998
54 M 36 M 2 1000 677 646
55 F 99 S 0 10600 608 998
现在我要做的是创建另一个CSV文件,并用类型“替换”这些值。因此,理想的结果将是:
'string', 'string', 'string', 'string', 'string', 'string', 'string', 'string'
'int', 'string', 'int', 'string', 'int', 'int', 'int', 'int', 'int'
'int', 'string', 'int', 'string', 'int', 'int', 'int', 'int', 'int'
'int', 'string', 'int', 'string', 'int', 'int', 'int', 'int', 'int'
'int', 'string', 'int', 'string', 'int', 'int', 'int', 'int', 'int'
我当前使用的代码是:
def csvfields2types(self, csvfile):
csvtypes = []
for line in csvfile:
row = []
for variable in line:
if variable == str:
row.append('string')
elif variable == float:
row.apend('float')
elif variable == int:
row.append('int')
else:
row.append('huh?')
csvtypes.append(row)
return csvtypes
它只返回带有“呵呵”的列表。
答案 0 :(得分:0)
您正在检查变量的值是否为字符串。您想检查它的类型是否是字符串...
if type(variable) == str:
答案 1 :(得分:0)
您是否熟悉Python中的EAFP原理?如果没有,请查看以下问题:What is the EAFP principle in Python?
我们可以在此处执行类似的操作:您可以使用try
“测试”类型,只需假设字符串代表该类型的值并将其转换即可。如果可行,我们找到了一个匹配的类型。如果失败,我们尝试下一种。您必须确保以限制性最强的类型int
开始(因为所有整数也可以解释为以.0
结尾的浮点数),然后是float
,然后是{{1} }。
将其放入函数中可能类似于:
str
一些例子:
def check_type(input_string):
try:
int(input_string)
return int
except ValueError:
pass
try:
float(input_string)
return float
except ValueError:
pass
return str
顺便说一句,不要被scientific notation所迷惑,这也是可接受的float输入:
>>> check_type("10")
<class 'int'>
>>> check_type("10.1")
<class 'float'>
>>> check_type("A")
<class 'str'>
答案 2 :(得分:0)
如果从对象创建熊猫数据框,则可以执行以下操作:
import pandas as pd
df = pd.read_csv('out146.txt', delim_whitespace=True)
for col in df:
df[col] = df[col].apply(lambda x: f"""'{re.findall(r"'(.*?)'",str(type(x))).pop()}'""")
输出:
id gender age marital location income intelliscore emotiscore
0 'int' 'str' 'int' 'str' 'int' 'int' 'int' 'int'
1 'int' 'str' 'int' 'str' 'int' 'int' 'int' 'int'
2 'int' 'str' 'int' 'str' 'int' 'int' 'int' 'int'
3 'int' 'str' 'int' 'str' 'int' 'int' 'int' 'int'
4 'int' 'str' 'int' 'str' 'int' 'int' 'int' 'int'
答案 3 :(得分:0)
假设输入CSV文件(csvfile.csv
)仅由一个空格字符(“”)分隔,则可以定义两种方法来确定每行上的每个元素是整数还是浮点数(如果不是)应该是一个字符串),然后使用csv Python module。
一个将所需结果写入新output.csv
文件的工作示例如下:
import csv
def isint(n):
try:
int(n)
return True
except:
return False
def isfloat(n):
try:
float(n)
return True
except:
return False
csvfile = list(csv.reader(open("csvfile.csv", "r"), delimiter=" "))
out = csv.writer(open("output.csv", "w"), delimiter=",")
for line in csvfile:
row = []
for variable in line:
if isint(variable) == True:
row.append('int')
elif isfloat(variable) == True:
row.append('float')
else:
row.append('str')
out.writerow(row)