我正在根据另一列中的条件从一列中提取数据子集。
我可以得到正确的值,但它在pandas.core.frame.DataFrame中。我怎么把它转换成列表?
import pandas as pd tst = pd.read_csv('C:\\SomeCSV.csv') lookupValue = tst['SomeCol'] == "SomeValue" ID = tst[lookupValue][['SomeCol']] #How To convert ID to a list
你可以使用Series.to_list方法。
Series.to_list
例如:
import pandas as pd df = pd.DataFrame({'a': [1, 3, 5, 7, 4, 5, 6, 4, 7, 8, 9], 'b': [3, 5, 6, 2, 4, 6, 7, 8, 7, 8, 9]}) print(df['a'].to_list())
输出:
[1, 3, 5, 7, 4, 5, 6, 4, 7, 8, 9]
要删除副本,您可以执行以下操作之一:
>>> df['a'].drop_duplicates().to_list() [1, 3, 5, 7, 4, 6, 8, 9] >>> list(set(df['a'])) # as pointed out by EdChum [1, 3, 4, 5, 6, 7, 8, 9]
df.values
numpy array
int
float
a b 0 1 4 1 2 5 2 3 6 a float64 b int64
如果你想保持原始的dtype,你可以这样做
row_list = df.to_csv(None, header=False, index=False).split('\n')
这将以字符串的形式返回每一行。
['1.0,4', '2.0,5', '3.0,6', '']
然后拆分每一行得到list of list。拆分后的每个元素都是unicode。我们需要转换它所需的数据类型。
def f(row_str): row_list = row_str.split(',') return [float(row_list[0]), int(row_list[1])] df_list_of_list = map(f, row_list[:-1]) [[1.0, 4], [2.0, 5], [3.0, 6]]
你可以使用pandas.Series.tolist
pandas.Series.tolist
import pandas as pd df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
运行:
>>> df['a'].tolist()
你会得到
>>> [1, 2, 3]
我想澄清几件事:
pandas.Series.tolist()
pandas.Series.values.tolist()
tst[lookupValue][['SomeCol']]
tst[lookupValue]
[['SomeCol']]
tst[lookupValue]['SomeCol']
pandas.DataFrame.squeeze()
tst.loc[lookupValue, 'SomeCol']
ID = tst.loc[tst['SomeCol'] == 'SomeValue', 'SomeCol'].tolist()
演示代码:
import pandas as pd df = pd.DataFrame({'colA':[1,2,1], 'colB':[4,5,6]}) filter_value = 1 print "df" print df print type(df) rows_to_keep = df['colA'] == filter_value print "\ndf['colA'] == filter_value" print rows_to_keep print type(rows_to_keep) result = df[rows_to_keep]['colB'] print "\ndf[rows_to_keep]['colB']" print result print type(result) result = df[rows_to_keep][['colB']] print "\ndf[rows_to_keep][['colB']]" print result print type(result) result = df[rows_to_keep][['colB']].squeeze() print "\ndf[rows_to_keep][['colB']].squeeze()" print result print type(result) result = df.loc[rows_to_keep, 'colB'] print "\ndf.loc[rows_to_keep, 'colB']" print result print type(result) result = df.loc[df['colA'] == filter_value, 'colB'] print "\ndf.loc[df['colA'] == filter_value, 'colB']" print result print type(result) ID = df.loc[rows_to_keep, 'colB'].tolist() print "\ndf.loc[rows_to_keep, 'colB'].tolist()" print ID print type(ID) ID = df.loc[df['colA'] == filter_value, 'colB'].tolist() print "\ndf.loc[df['colA'] == filter_value, 'colB'].tolist()" print ID print type(ID)
结果:
df colA colB 0 1 4 1 2 5 2 1 6 <class 'pandas.core.frame.DataFrame'> df['colA'] == filter_value 0 True 1 False 2 True Name: colA, dtype: bool <class 'pandas.core.series.Series'> df[rows_to_keep]['colB'] 0 4 2 6 Name: colB, dtype: int64 <class 'pandas.core.series.Series'> df[rows_to_keep][['colB']] colB 0 4 2 6 <class 'pandas.core.frame.DataFrame'> df[rows_to_keep][['colB']].squeeze() 0 4 2 6 Name: colB, dtype: int64 <class 'pandas.core.series.Series'> df.loc[rows_to_keep, 'colB'] 0 4 2 6 Name: colB, dtype: int64 <class 'pandas.core.series.Series'> df.loc[df['colA'] == filter_value, 'colB'] 0 4 2 6 Name: colB, dtype: int64 <class 'pandas.core.series.Series'> df.loc[rows_to_keep, 'colB'].tolist() [4, 6] <type 'list'> df.loc[df['colA'] == filter_value, 'colB'].tolist() [4, 6] <type 'list'>