Ich möchte eine CSV-Datei mit Temperaturen in Celsius nehmen und in Fahrenheit umwandeln.Umwandlung von Celsius in Fahrenheit in CSV-Datei
Aktuelle Versuch:
import pandas as pd
df = pd.read_csv('/temperature_data.csv',)
def f(x):
x = x * 1.8 + 32
return float(x)
df['AirTemperature'] = df.apply(f, axis=1)
Ich bin in der Lage, erfolgreich dies zu tun, wenn ich einfach Eingabe eine ganze Zahl in die Funktion, aber ich halte diese Fehlermeldung erhalten, wenn ich versuche, die CSV-Datei zu verwenden:
can't multiply sequence by non-int of type 'float'
Ich habe versucht, Werte in Float zu konvertieren, aber ich hatte kein Glück.
Bearbeiten: Die CSV-Datei, die ich verwende, ist mehrspaltig. Es hat mehr als nur Lufttemperatur drin.
hier auch voll Zurückverfolgungs
`---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-a63269740c5c> in <module>()
----> 1 df['AirTemperature'] = df.apply(f, axis=1)
/Users/pvayn/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc in apply(self, func, axis, broadcast, raw, reduce, args, **kwds)
4040 if reduce is None:
4041 reduce = True
-> 4042 return self._apply_standard(f, axis, reduce=reduce)
4043 else:
4044 return self._apply_broadcast(f, axis)
/Users/pvayn/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc in _apply_standard(self, func, axis, ignore_failures, reduce)
4136 try:
4137 for i, v in enumerate(series_gen):
-> 4138 results[i] = func(v)
4139 keys.append(v.name)
4140 except Exception as e:
<ipython-input-3-895f5da25595> in f(x)
1 def f(x):
----> 2 x = x*1.8 + 32
3 return float(x)
/Users/pvayn/anaconda/lib/python2.7/site-packages/pandas/core/ops.pyc in wrapper(left, right, name, na_op)
647 lvalues = lvalues.values
648
--> 649 return left._constructor(wrap_results(na_op(lvalues, rvalues)),
650 index=left.index, name=left.name,
651 dtype=dtype)
/Users/pvayn/anaconda/lib/python2.7/site-packages/pandas/core/ops.pyc in na_op(x, y)
588 result = np.empty(len(x), dtype=x.dtype)
589 mask = notnull(x)
--> 590 result[mask] = op(x[mask], y)
591 else:
592 raise TypeError("{typ} cannot perform the operation "
TypeError: ("can't multiply sequence by non-int of type 'float'", u'occurred at index 0')
Der Code, den Sie angegeben haben, funktioniert für mich, mit einer einspaltigen CSV, die sowohl Floats als auch Ints enthält. Können wir den vollständigen Traceback sehen? –
Scheint ziemlich klar, dass 'x' von der Funktion empfangen wird, ist ein Sequenztyp, nicht ein int. Dies scheint in der Dokumentation erwähnt zu werden: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html Möglicherweise müssen Sie 'f' ändern, um das zu berücksichtigen. –
Haben Sie eine Empfehlung, wie ich das @DavidZemens angehen könnte? – pvayn