<h4 dir="auto">Code Sample, a copy-pastable example if possible</h4>
<p dir="auto">As expected:</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import pandas as pd
all_cols = list(&quot;abcdefg&quot;)

informative_cols = [&quot;a&quot;,&quot;c&quot;,&quot;g&quot;]
 
dfrandom = pd.DataFrame(pd.np.random.rand(5, len(all_cols)), columns=all_cols)

field = informative_cols[0]
print(field)
print(type(dfrandom[field]))
print(type(dfrandom[informative_cols][field]))"><pre class="notranslate"><span class="pl-k">import</span> <span class="pl-s1">pandas</span> <span class="pl-k">as</span> <span class="pl-s1">pd</span>
<span class="pl-s1">all_cols</span> <span class="pl-c1">=</span> <span class="pl-en">list</span>(<span class="pl-s">"abcdefg"</span>)

<span class="pl-s1">informative_cols</span> <span class="pl-c1">=</span> [<span class="pl-s">"a"</span>,<span class="pl-s">"c"</span>,<span class="pl-s">"g"</span>]
 
<span class="pl-s1">dfrandom</span> <span class="pl-c1">=</span> <span class="pl-s1">pd</span>.<span class="pl-v">DataFrame</span>(<span class="pl-s1">pd</span>.<span class="pl-s1">np</span>.<span class="pl-s1">random</span>.<span class="pl-en">rand</span>(<span class="pl-c1">5</span>, <span class="pl-en">len</span>(<span class="pl-s1">all_cols</span>)), <span class="pl-s1">columns</span><span class="pl-c1">=</span><span class="pl-s1">all_cols</span>)

<span class="pl-s1">field</span> <span class="pl-c1">=</span> <span class="pl-s1">informative_cols</span>[<span class="pl-c1">0</span>]
<span class="pl-en">print</span>(<span class="pl-s1">field</span>)
<span class="pl-en">print</span>(<span class="pl-en">type</span>(<span class="pl-s1">dfrandom</span>[<span class="pl-s1">field</span>]))
<span class="pl-en">print</span>(<span class="pl-en">type</span>(<span class="pl-s1">dfrandom</span>[<span class="pl-s1">informative_cols</span>][<span class="pl-s1">field</span>]))</pre></div>
<p dir="auto">returns:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="a
&lt;class 'pandas.core.series.Series'&gt;
&lt;class 'pandas.core.series.Series'&gt;"><pre class="notranslate"><code class="notranslate">a
&lt;class 'pandas.core.series.Series'&gt;
&lt;class 'pandas.core.series.Series'&gt;
</code></pre></div>
<p dir="auto">However, unexpectedly:</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import pandas as pd
all_cols = list(&quot;abcdefg&quot;)

informative_cols = [&quot;a&quot;,&quot;c&quot;,&quot;g&quot;]

dfrandom = pd.DataFrame(pd.np.random.rand(5, len(all_cols)), columns=all_cols)

field = informative_cols[0]
print(field)
print(type(dfrandom[field]))
print(type(dfrandom[informative_cols][field]))"><pre class="notranslate"><span class="pl-k">import</span> <span class="pl-s1">pandas</span> <span class="pl-k">as</span> <span class="pl-s1">pd</span>
<span class="pl-s1">all_cols</span> <span class="pl-c1">=</span> <span class="pl-en">list</span>(<span class="pl-s">"abcdefg"</span>)

<span class="pl-s1">informative_cols</span> <span class="pl-c1">=</span> [<span class="pl-s">"a"</span>,<span class="pl-s">"c"</span>,<span class="pl-s">"g"</span>]

<span class="pl-s1">dfrandom</span> <span class="pl-c1">=</span> <span class="pl-s1">pd</span>.<span class="pl-v">DataFrame</span>(<span class="pl-s1">pd</span>.<span class="pl-s1">np</span>.<span class="pl-s1">random</span>.<span class="pl-en">rand</span>(<span class="pl-c1">5</span>, <span class="pl-en">len</span>(<span class="pl-s1">all_cols</span>)), <span class="pl-s1">columns</span><span class="pl-c1">=</span><span class="pl-s1">all_cols</span>)

<span class="pl-s1">field</span> <span class="pl-c1">=</span> <span class="pl-s1">informative_cols</span>[<span class="pl-c1">0</span>]
<span class="pl-en">print</span>(<span class="pl-s1">field</span>)
<span class="pl-en">print</span>(<span class="pl-en">type</span>(<span class="pl-s1">dfrandom</span>[<span class="pl-s1">field</span>]))
<span class="pl-en">print</span>(<span class="pl-en">type</span>(<span class="pl-s1">dfrandom</span>[<span class="pl-s1">informative_cols</span>][<span class="pl-s1">field</span>]))</pre></div>
<p dir="auto">returns:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="0_AnatomicRegionSequence_CodeMeaning
&lt;class 'pandas.core.series.Series'&gt;
&lt;class 'pandas.core.frame.DataFrame'&gt;"><pre class="notranslate"><code class="notranslate">0_AnatomicRegionSequence_CodeMeaning
&lt;class 'pandas.core.series.Series'&gt;
&lt;class 'pandas.core.frame.DataFrame'&gt;
</code></pre></div>
<h4 dir="auto">Problem description</h4>
<p dir="auto">Subsetting one single column with a string must output the same result independent of copying and previous subsetting.<br>
Because expected output is consistent and unexpected is inconsistent</p>
<h4 dir="auto">Expected Output</h4>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="0_AnatomicRegionSequence_CodeMeaning
&lt;class 'pandas.core.series.Series'&gt;
&lt;class 'pandas.core.series.Series'&gt;"><pre class="notranslate"><code class="notranslate">0_AnatomicRegionSequence_CodeMeaning
&lt;class 'pandas.core.series.Series'&gt;
&lt;class 'pandas.core.series.Series'&gt;
</code></pre></div>
<h4 dir="auto">Output of <code class="notranslate">pd.show_versions()</code></h4>
<details>
INSTALLED VERSIONS
------------------
commit: None
python: 3.6.1.final.0
python-bits: 64
OS: Linux
OS-release: 4.2.0-42-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: en_US.UTF-8
<p dir="auto">pandas: 0.20.2<br>
pytest: None<br>
pip: 9.0.1<br>
setuptools: 36.0.1<br>
Cython: None<br>
numpy: 1.13.0<br>
scipy: 0.19.0<br>
xarray: None<br>
IPython: 6.1.0<br>
sphinx: None<br>
patsy: 0.4.1<br>
dateutil: 2.6.0<br>
pytz: 2017.2<br>
blosc: None<br>
bottleneck: None<br>
tables: None<br>
numexpr: None<br>
feather: None<br>
matplotlib: 2.0.2<br>
openpyxl: None<br>
xlrd: None<br>
xlwt: None<br>
xlsxwriter: None<br>
lxml: None<br>
bs4: None<br>
html5lib: 0.999999999<br>
sqlalchemy: None<br>
pymysql: None<br>
psycopg2: None<br>
jinja2: 2.9.6<br>
s3fs: None<br>
pandas_gbq: None<br>
pandas_datareader: None</p>
</details>
<h2 dir="auto">In [6]: DataFrame.from_records( [(1,2,3)], columns=['a','b','a'])</h2>
<p dir="auto">IndexError                                Traceback (most recent call last)<br>
/home/adam/bin/jtds/ in ()<br>
----&gt; 1 DataFrame.from_records( [(1,2,3)], columns=['a','b','a'])</p>
<p dir="auto">/home/adam/code/pandas/pandas/core/frame.pyc in from_records(cls, data, index, exclude, columns, names, coerce_float)<br>
760             result_index = np.arange(len(data))<br>
761<br>
--&gt; 762         return cls(sdict, index=result_index, columns=columns)<br>
763<br>
764     def to_records(self, index=True):</p>
<p dir="auto">/home/adam/code/pandas/pandas/core/frame.pyc in <strong>init</strong>(self, data, index, columns, dtype, copy)<br>
301             mgr = self._init_mgr(data, index, columns, dtype=dtype, copy=copy)<br>
302         elif isinstance(data, dict):<br>
--&gt; 303             mgr = self._init_dict(data, index, columns, dtype=dtype)<br>
304         elif isinstance(data, ma.MaskedArray):<br>
305             mask = ma.getmaskarray(data)</p>
<p dir="auto">/home/adam/code/pandas/pandas/core/frame.pyc in _init_dict(self, data, index, columns, dtype)<br>
391<br>
392         # segregates dtypes and forms blocks matching to columns</p>
<p dir="auto">--&gt; 393         blocks = form_blocks(homogenized, axes)<br>
394<br>
395         # consolidate for now</p>
<p dir="auto">/home/adam/code/pandas/pandas/core/internals.pyc in form_blocks(data, axes)<br>
1125<br>
1126     if len(int_dict):<br>
-&gt; 1127         int_block = _simple_blockify(int_dict, items, np.int64)<br>
1128         blocks.append(int_block)<br>
1129</p>
<p dir="auto">/home/adam/code/pandas/pandas/core/internals.pyc in _simple_blockify(dct, ref_items, dtype)<br>
1154<br>
1155 def _simple_blockify(dct, ref_items, dtype):<br>
-&gt; 1156     block_items, values = _stack_dict(dct, ref_items, dtype)<br>
1157     # CHECK DTYPE?</p>
<p dir="auto">1158     if values.dtype != dtype: # pragma: no cover</p>
<p dir="auto">/home/adam/code/pandas/pandas/core/internals.pyc in _stack_dict(dct, ref_items, dtype)<br>
1187     stacked = np.empty(shape, dtype=dtype)<br>
1188     for i, item in enumerate(items):<br>
-&gt; 1189         stacked[i] = _asarray_compat(dct[item])<br>
1190<br>
1191     # stacked = np.vstack([_asarray_compat(dct[k]) for k in items])</p>
<p dir="auto">IndexError: index out of bounds</p>